UVa 10881 - Piotr's Ants - 水题

来源:互联网 发布:re文件管理器源码 编辑:程序博客网 时间:2024/06/03 21:47

题目描述:lrj后白书第一章第五道例题

题目分析:1)从宏观上看,蚂蚁碰撞并没有影响它们的爬行; 2) 蚂蚁的相对位置是不会变的。所以只需要处理初始状态和最后的状态即可。

下面是代码:

#include <cstdio>#include <string>#include <algorithm>using namespace std;const int maxn = 10100;struct ant {int id;int dir;int pos;ant() {}ant(int a,int b,int c): id(a),pos(b),dir(c) {}} before[maxn],after[maxn];int T;int l,t,n;int order[maxn];char direction[][10] = {"L","Turning","R"};bool cmp(ant a,ant b){return a.pos < b.pos;}int main(){int cas = 0;scanf("%d",&T);while(T--){scanf("%d%d%d",&l,&t,&n);for(int i = 0; i < n; i++){int pos,dir;char ch;scanf("%d %c",&pos,&ch);dir = (ch == 'L') ? -1 : 1;before[i] = ant(i,pos,dir);after[i] = ant(0,pos+dir*t,dir);}//for(int i = 0; i < n; i++) printf("%d ",before[i].pos); printf("\n");//for(int i = 0; i < n; i++) printf("%d ",after[i].pos); printf("\n");sort(before,before+n,cmp);for(int i = 0; i < n; i++) order[before[i].id] = i;sort(after,after+n,cmp);for(int i = 0; i < n-1; i++)if(after[i].pos == after[i+1].pos) after[i].dir = after[i+1].dir = 0;printf("Case #%d:\n",++cas);for(int i = 0; i < n; i++){int id = order[i];if(after[id].pos > l || after[id].pos < 0) printf("Fell off\n");else printf("%d %s\n",after[id].pos,direction[after[id].dir+1]);}printf("\n");}return 0;}



0 0
原创粉丝点击