UVA 10881
2013-09-17 19:58
134 查看
题意:一条长L厘米的木棒,上有N只蚂蚁,有的向左爬,有的向右爬,速度为1厘米/秒。如果向碰撞了就往返方向爬,左为L,右为R。求T秒后每只蚂蚁的位置。
题解:先排序,把蚂蚁的位置记录下来。如果蚂蚁相撞了,就当作两只蚂蚁直接穿过。排序后直接加上T,因为排序后的蚂蚁编号已经固定了,不过怎样爬动,都是在木棒上的第i只。
//#define YE #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node { int num; int s; char c[2]; }m[10005]; int state[10005]; bool cmp(node a,node b) { if(a.s<b.s) return 1; return 0; } int main() { #ifdef YE freopen("123","r",stdin); #endif int n; while(scanf("%d",&n)!=EOF) { int j=1; while(n--) { int a,L,T; int i; scanf("%d%d%d",&L,&T,&a); for(i=0;i<a;i++) { scanf("%d %s",&m[i].s,m[i].c); m[i].num=i; } printf("Case #%d:\n",j++); sort(m,m+a,cmp); for(i=0;i<a;i++) { if(m[i].c[0]=='R') m[i].s+=T; else m[i].s-=T; state[m[i].num]=i; } sort(m,m+a,cmp); for(i=0;i<a;i++) { if(m[i].s==m[i+1].s) { m[i].c[0]='E'; m[i+1].c[0]='E'; } } for(i=0;i<a;i++) { int nu=state[i]; if(m[nu].s>L||m[nu].s<0) { printf("Fell off\n"); } else if(m[nu].c[0]=='E') { printf("%d Turning\n",m[nu].s); } else { printf("%d %c\n",m[nu].s,m[nu].c[0]); } } printf("\n"); } } return 0; }
相关文章推荐
- uva10881
- uva 10881 Piotr's Ants 模拟
- UVA 10881 - Piotr's Ants 蚂蚁
- UVA10881----Piotr's Ants
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
- [UVA] 10881 - Piotr's Ants - 思维(丑陋的)
- UVA 10881(p9)----Piotr's Ants
- uva 10881 - Piotr's Ants (思维,3级)
- UVA 10881 Piotr's Ants
- 《算法竞赛-训练指南》第一章-1.5_UVa 10881
- Uva 10881 Piotr's Ants
- UVA 10881 Piotr's Ants
- Piotr's Ants UVA - 10881
- Piotr's Ants(Uva 10881)
- UVa 10881 Piotr's Ants ——思路题
- 蚂蚁-UVA 10881 - Piotr's Ants
- 模拟 uva 10881 - Piotr's Ants
- UVa 10881 - Piotr's Ants
- UVa 10881 Piotr's Ants
- Piotr's Ants UVA - 10881