POJ 1852 Ants 分析

1、暴搜

每只蚂蚁朝向有两种,可以枚举n只蚂蚁的朝向,然后模拟蚂蚁相遇的情景,总共2^n中情况。

2、分析ants相碰的情况:

(a->)  (<-b) 变成 (<-a)(b->)

由于每只蚂蚁是相同的,所以等价与(<-b)(a->),这和两只蚂蚁原来的走向是一样的,即把碰撞当作没发生过

所以可以对每一只蚂蚁检查一次就可以了

3、空间优化

存蚂蚁的初始位置O(n),但是我们每次只要比较 a[i] 和 len-a[i] 就可以了,后面不需要这两个值了,所以完全可以用一个x来存ant position,空间O(1)

最终每一次 时间O(n) 空间O(1)

/* 贪心,挑战程序设计竞赛 巫 */
#include<cstdio>

int min(int a,int b){ return a<b?a:b;}

int main()
{
    int T,len,n,x,minn,maxn,tmp;
    scanf("%d",&T);
    while(T--){
        scanf("%d %d",&len,&n);
        minn=-1111111,maxn=-11111;
        while(n--){
            scanf("%d",&x);
            tmp=min(x,len-x); /* smaller one */
            if(tmp>minn) minn=tmp;
            tmp=len-tmp;     /* bigger one */
            if(tmp>maxn) maxn=tmp;
        }
        printf("%d %d\n",minn,maxn);
    }
    return 0;
}
时间: 2024-10-14 10:59:53

POJ 1852 Ants 分析的相关文章

POJ 1852 Ants

Ants Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15617   Accepted: 6753 Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it imm

POJ 1852 Ants 思维题 简单题

Ants Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it immediatelly falls off it. When two ants meet they turn back and start walking in oppos

POJ 1852 Ants (思维技巧 + 贪心)

Ants Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10639   Accepted: 4718 Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it imm

poj 1852 Ants(贪心)

Ants Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14061   Accepted: 6134 Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it imm

水题/poj 1852 Ants

1 /* 2 PROBLEM:poj1852 3 AUTHER:Nicole 4 MEMO:水题 5 */ 6 #include<cstdio> 7 using namespace std; 8 int cmax(int a,int b){return a>b?a:b;} 9 int cmin(int a,int b){return a<b?a:b;} 10 int main() 11 { 12 int cases; 13 scanf("%d",&cas

poj -1852 ants (思维题)

n只蚂蚁以每秒1cm的速度在长为Lcm的杆子上爬行,当蚂蚁爬到杆子的端点时就会掉落,由于杆子太细,两只蚂蚁相遇时,他们不能交错通过,只能各自反向爬回去,对于每只蚂蚁,我们知道它距离杆子左端的距离为x,但不知道它当前的朝向,请计算所有蚂蚁落下杆子所需的最短时间很最长时间. #include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <cstring&g

POJ 1201 差分方程分析

POJ 1201 给你N个闭区间.每个区间分别为[ai,bi],你必须在这个区间上至少取ci个不同的整数. 现要求所有区间满足各自的条件. 问最少需要选多少个点. 例如[3,7](3)  [8,10](3)  [6,8](1)  [1,3](1)  [10,11](1) 我们最少需要选6个点: 3 4 6 8 9 10 在这里我们可以看成是dp[7]-dp[2]>=3 dp[10]-dp[8]>=3 .... 这就可以理解为2->7的距离可以定为3,8->10的距离也定为3 我们再

poj 1852&amp;3684 题解

poj 1852 3684 这两题思路相似就放在一起. 1852 题意 一块长为L长度单位的板子(从0开始)上有很多只蚂蚁,给出它们的位置,它们的方向不确定,速度为每秒一长度单位,当两只蚂蚁相遇的时候,它们会反向而行,问所有蚂蚁到达终点(到0或者到L)所需要的最短时间和最长时间. 解析 一开始拿到这题觉得还是有点难度的,但一想通就发现这是个大水题.我们可以假设两只蚂蚁它们相向而行,并且它们中间没有别的蚂蚁,此时它们距离为k,经过时间t后它们相遇,此时它们反向,又经过时间t它们再次之间距离还是k.

Ants POJ 1852

Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it immediatelly falls off it. When two ants meet they turn back and start walking in opposite d