1 条题解
-
0
C :
struct number {double address; int direction; }num[100]; int main(int argc, char* argv[]) {int n,i,j,mb,count,time,k,kj,bh[3],tem; double i1; while(~scanf("%d",&n)) { time=0;k=0;kj=0; for(i=0;i<n;i++) { scanf("%lf%d",&num[i].address,&num[i].direction); if(num[i].direction==0)mb=i; } while(1) { if(k==1)break; for(i1=0;i1<=100;i1=i1+0.5) { count=0; for(j=0;j<n;j++) if(i1==num[j].address){bh[count]=j;count++;} if(count==2){ tem=num[bh[0]].direction;num[bh[0]].direction=num[bh[1]].direction;num[bh[1]].direction=tem;} if(count==3){ if(num[bh[0]].direction==0){ tem=num[bh[1]].direction;num[bh[1]].direction=num[bh[2]].direction;num[bh[2]].direction=tem;} if(num[bh[1]].direction==0){ tem=num[bh[0]].direction;num[bh[0]].direction=num[bh[2]].direction;num[bh[2]].direction=tem;} if(num[bh[2]].direction==0){ tem=num[bh[1]].direction;num[bh[1]].direction=num[bh[0]].direction;num[bh[0]].direction=tem;} } } for(j=0;j<n;j++) { if(num[j].address==0||num[j].address==100) { if(j==mb){printf("%d\n",time/2);k=1;break;} else {kj++;num[j].direction=0;num[j].address=-1; } } num[j].address+=num[j].direction*0.5; } if(n-kj==1){printf("Cannot fall!\n");k=1;} time++; } } return 0; }
C++ :
#include <iostream> #include <algorithm> using namespace std; struct Node { int speed; int position; }ant[110]; void Swap(int a,int b) { int tmp=ant[a].speed; ant[a].speed=ant[b].speed; ant[b].speed=tmp; } bool cmp(Node a,Node b) { return a.position<b.position; } int gao(int N,int goal) { int head=0,tail=N-1; int time=0; while(1) { if(time>210)return -1; time++; for(int i=head;i<=tail;i++) ant[i].position+=ant[i].speed;//每0.5秒移动一次 for(int i=head;i<=tail;i++) if(ant[i].speed==1)//两移动的蚂蚁相撞 { if(i<tail&&ant[i+1].speed==-1&&ant[i+1].position==ant[i].position) Swap(i,i+1); } else if(ant[i].speed==-1) { if(i>head&&ant[i-1].speed==-1&&ant[i-1].position==ant[i].position) Swap(i-1,i); } else if(ant[i].speed==0)//三只蚂蚁相撞 { if(i>head&&i<tail&&ant[i].position==ant[i-1].position&&ant[i].position==ant[i+1].position&&ant[i-1].speed==1&&ant[i+1].speed==-1) Swap(i-1,i+1);//左边的蚂蚁撞上静止的蚂蚁 else if(i>head&&ant[i].position==ant[i-1].position&&ant[i-1].speed==1) Swap(i-1,i);//右边的蚂蚁撞上静止的蚂蚁 else if(i<tail&&ant[i].position==ant[i+1].position&&ant[i+1].speed==-1) Swap(i,i+1); } if(ant[goal].position<=0||ant[goal].position>=200)return time/2; if(ant[head].position<=0)head++; if(ant[tail].position>=200)tail--; } return -1; } int main() { int N; while(cin>>N) { int goal=-1; for(int i=0;i<N;i++) { cin>>ant[i].position>>ant[i].speed; ant[i].position*=2; } sort(ant,ant+N,cmp); for(int i=0;i<N;i++) if(ant[i].speed==0) goal=i; int res=gao(N,goal); if(res==-1) cout<<"Cannot fall!"<<endl; else cout<<res<<endl; } return 0; }
- 1
信息
- ID
- 1473
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者