POJ 1852 Ants 分析
2015-02-02 19:05
316 查看
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)
每只蚂蚁朝向有两种,可以枚举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; }
相关文章推荐
- POJ 1852 Ants 蚂蚁
- POJ 1852 Ants
- poj1852 Ants
- poj 1852 ants(模拟+想象力)
- UVa 10714 & POJ 1852 & ZOJ 2376 - Ants
- POJ 1852 Ants
- poj_1852_Ants
- POJ 1852 Ants 模拟
- poj 1852 Ants_贪心
- poj 1852 Ants
- POJ-1852-Ants
- [ACM] POJ 1852 Ants
- [ACM] POJ 1852 Ants
- poj 1852 ants
- poj 1852 Ants
- POJ 1852 Ants
- 简单思维题 poj 1852 Ants
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
- POJ 1852 Ants
- POJ 1852 Ants