首页 > 代码库 > Uva10881 Piotr's Ants
Uva10881 Piotr's Ants
蚂蚁相撞会各自回头。←可以等效成对穿而过,这样移动距离就很好算了。
末状态蚂蚁的顺序和初状态其实是相同的。
那么剩下的就是记录每只蚂蚁的标号,模拟即可。
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<vector> 8 using namespace std; 9 const int mxn=10010;10 struct ants{11 int id,p,dir;12 int pos;13 }a[mxn];14 int cmp(const ants x,const ants y){15 return x.p<y.p;16 }17 int cmp2(const ants x,const ants y){18 return x.pos<y.pos;19 }20 int l,t,n;21 int mp[mxn];22 int main(){23 int T,i,j;24 scanf("%d",&T);25 int cas=0;26 while(T--){27 printf("Case #%d:\n",++cas);28 scanf("%d%d%d",&l,&t,&n);29 char dr;30 for(i=1;i<=n;i++){31 scanf("%d %c",&a[i].p,&dr);32 if(dr==‘L‘) a[i].dir=-1;33 else a[i].dir=1;34 }35 for(i=1;i<=n;i++){36 a[i].id=i;37 a[i].pos=a[i].p+t*a[i].dir;38 }39 sort(a+1,a+n+1,cmp);40 for(i=1;i<=n;i++){41 mp[a[i].id]=i;42 }43 sort(a+1,a+n+1,cmp2);44 for(i=1;i<n;i++){45 if(a[i].pos==a[i+1].pos){46 a[i].dir=a[i+1].dir=0;47 }48 }49 for(i=1;i<=n;i++){50 int thi=mp[i];51 if(a[thi].pos<0 || a[thi].pos>l){52 printf("Fell off\n");continue;53 }54 printf("%d ",a[thi].pos);55 if(a[thi].dir==-1)printf("L\n");56 else if(a[thi].dir==1)printf("R\n");57 else printf("Turning\n");58 }59 printf("\n");60 }61 return 0;62 }
Uva10881 Piotr's Ants
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。