首页 > 代码库 > poj 2632 Crashing Robots
poj 2632 Crashing Robots
坑了,没想的太周到,WA好久,
就两个地方想错了。。
一。对撞在撞墙之前,
二。对撞的是最靠近要动的这个的,
写的是按编号顺序判断。。。心碎了
模拟太坑爹。。。
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; char qq[105]; int a,s[105][2],b,c,t[3]; int d,e; int k,l,h,m,n; void show(int q,char w,int e) { h=0; int nb=1002; if(w=='F') { if(qq[q]=='E') {s[q][0]+=e; if(s[q][0]>b) {h=1;k=q;} for(int i=1;i<=m;i++) { if(q==i) continue; if(s[q][1]==s[i][1]&&s[i][0]<=s[q][0]&&s[q][0]-e<s[i][0]) { int uu=e-s[q][0]+s[i][0]; if(uu<nb) { nb=uu; k=q;l=i; t[1]=1;} } } } if(qq[q]=='W') { s[q][0]-=e; if(s[q][0]<=0) {h=1;k=q;} for(int i=1;i<=m;i++) { if(q==i) continue; if(s[q][1]==s[i][1]&&s[i][0]>=s[q][0]&&s[q][0]+e>s[i][0]) {int uu=e+s[q][0]-s[i][0]; if(uu<nb) { nb=uu; k=q;l=i; t[1]=1;} } } } if(qq[q]=='S') { s[q][1]-=e; if(s[q][1]<=0) { h=1;k=q;} for(int i=1;i<=m;i++) { if(q==i) continue; if(s[q][0]==s[i][0]&&s[i][1]>=s[q][1]&&s[q][1]+e>s[i][1]) { int uu=e+s[q][1]-s[i][1]; if(uu<nb) { nb=uu; k=q;l=i; t[1]=1;} } } } if(qq[q]=='N') { s[q][1]+=e; if(s[q][1]>c) {h=1;k=q;} for(int i=1;i<=m;i++) { if(q==i) continue; if(s[q][0]==s[i][0]&&s[i][1]<=s[q][1]&&s[q][1]-e<s[i][1]) { int uu=e-s[q][1]+s[i][1]; if(uu<nb) { nb=uu; k=q;l=i; t[1]=1;} } } } if(h==1) {t[0]=1;} } int u=0,p=0; if(w=='L') u=e%4; if(w=='R') p=e%4; if(u==1||p==3) { if(qq[q]=='E') { qq[q]='N'; } else if(qq[q]=='W') { qq[q]='S'; } else if(qq[q]=='S') { qq[q]='E'; } else if(qq[q]=='N') { qq[q]='W'; } } if(u==2||p==2) { if(qq[q]=='E') { qq[q]='W'; } else if(qq[q]=='W') { qq[q]='E'; } else if(qq[q]=='S') { qq[q]='N'; } else if(qq[q]=='N') { qq[q]='S'; } } if(u==3||p==1) { if(qq[q]=='E') { qq[q]='S'; } else if(qq[q]=='W') { qq[q]='N'; } else if(qq[q]=='S') { qq[q]='W'; } else if(qq[q]=='N') { qq[q]='E'; } } } int main() { scanf("%d",&a); while(a--) { memset(t,0,sizeof(t)); memset(s,0,sizeof(s)); scanf("%d %d",&b,&c); char r; k=0,l=0; scanf("%d %d",&m,&n); for(int i=1;i<=m;i++) { scanf("%d %d %c",&d,&e,&r); s[i][0]=d; s[i][1]=e; qq[i]=r; //printf("%d\n",s[i][1]); } for(int i=1;i<=n;i++) { scanf("%d %c %d",&d,&r,&e); if(t[0]!=0||t[1]!=0) continue; show(d,r,e); } if(t[1]==1) printf("Robot %d crashes into robot %d\n",k,l); else {if(t[0]==1) printf("Robot %d crashes into the wall\n",k); else printf("OK\n"); } } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。