uva 10881 Piotr's Ants
来源:互联网 发布:奇妙pk10软件免费版 编辑:程序博客网 时间:2024/06/08 07:07
Time Limit: 2 seconds
the ants will soon be here. And I, for one, welcome our
new insect overlords."
Kent Brockman
Piotr likes playing with ants. He has n of them on a horizontal pole L cm long. Each ant is facing either left or right and walks at a constant speed of 1 cm/s. When two ants bump into each other, they both turn around (instantaneously) and start walking in opposite directions. Piotr knows where each of the ants starts and which direction it is facing and wants to calculate where the ants will end up T seconds from now.
Input
The first line of input gives the number of cases, N. N test cases follow. Each one starts with a line containing 3 integers: L , T and n
Output
For each test case, output one line containing "Case #x:" followed by n lines describing the locations and directions of the n ants in the same format and order as in the input. If two or more ants are at the same location, print "Turning" instead of "L" or "R" for their direction. If an ant falls off the pole before Tseconds, print "Fell off" for that ant. Print an empty line after each test case.
210 1 41 R5 R3 L10 R10 2 34 R5 L8 R
Case #1:2 Turning6 R2 TurningFell offCase #2:3 L6 R10 R
开始和结束后的蚂蚁的相对位置是不变的。
#include <iostream>#include <algorithm>#include <string>#include <cstdio>#include <map>using namespace std;const int maxn=10005;struct node{ int index,x,dir; void fun(int _index,int _x,int _dir) { index=_index; x=_x; dir=_dir; }}a[maxn],b[maxn];bool cmp(node p,node q){ return p.x<q.x;}int n,T,L,t,ans[maxn];map <char ,int> mp;map <int ,string> mt;void initial(){ mp['L']=1; mp['R']=2; mt[1]="L"; mt[2]="R"; mt[3]="Turning"; mt[4]="Fell off";}void input(){ scanf("%d %d %d",&L,&t,&n); char op; int x; for(int i=0;i<n;i++) { scanf("%d %c",&x,&op); a[i].fun(i,x,mp[op]); if(op=='L') b[i].fun(i,x-t,mp[op]); else b[i].fun(i,x+t,mp[op]); }}void solve(int co){ printf("Case #%d:\n",co); sort(a,a+n,cmp); for(int i=0;i<n;i++) ans[a[i].index]=i; sort(b,b+n,cmp); for(int i=0;i<n-1;i++) if(b[i].x==b[i+1].x) b[i].dir=b[i+1].dir=3; for(int i=0;i<n;i++) { int u=ans[i]; if(b[u].x<0 || b[u].x>L) printf("Fell off\n"); else printf("%d %s\n",b[u].x,mt[b[u].dir].c_str()); } printf("\n");}int main(){ initial(); scanf("%d",&T); for(int co=1;co<=T;co++) { input(); solve(co); } return 0;}
- 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
- UVA 10881 Piotr's Ants
- 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
- 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
- 【UVA】10881-Piotr's Ants
- photoshop简单但却实用的小技巧
- PHP装饰模式
- 外观模式C++实现
- 习题1.11
- Length of Last Word
- uva 10881 Piotr's Ants
- C++学习总结
- 【重读设计模式】装饰模式
- Spiral Matrix II
- Linux下用C语言调用GAS汇编——综合实例
- Python3 for terminal IDE 的实现
- 中国互联网的“去中心化”与“中心化”之战
- 我在南大的七年
- Apache Pig的一些基础概念及用法总结(2)