悬关,如何判相遇?

P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two

@[lucy2012](/user/1252442) ```cpp #include <iostream> using namespace std; char map[10][10]; struct cowed{ int x,y,angle=0; }; struct farmered{ int x,y,angle=0; }; int cnt=0; /** 012345678 9 -> x eg. * is in map[0][0] 0 *...*.... . 1 ......*.. . 2 ...*...*. . 3 ......... . 4 ...*.F... . 5 *.....*.. . 6 ...*..... . 7 ..C...... * 8 ...*.*... . 9 .*.*..... . -> y .......... .********. .********. .********. .********. .********. .********. C********. .********. F......... **/ cowed cow; farmered farmer; cowed a; farmered b; int main() { for (int i=0;i<10;i++){ cin>>map[i]; } if (map[0]==".........."&&map[9]==".........."){ cout<<0; return 0; } //find cow for (int i=0;i<10;i++){ for (int j=0;j<10;j++){ if (map[i][j]=='C'){ cow.x=j; cow.y=i; break; } } } //find farmer for (int i=0;i<10;i++){ for (int j=0;j<10;j++){ if (map[i][j]=='F'){ farmer.x=j; farmer.y=i; break; } } } // if (cow.y==1){ //cout<<0; // return 0; // } // if (cow.y==0&&farmer.y==9){ // cout<<0; // return 0; // } a.x=cow.x; a.y=cow.y; b.x=farmer.x; b.y=farmer.y; //printf("%d %d %d %d",cow.x,cow.y,farmer.x,farmer.y); //int a; //cin>>a; //move while (++cnt&&cnt<=600000){ //cout<<2; if (a.x==cow.x&&a.y==cow.y&&cow.angle==0&&b.x==farmer.x&&b.y==farmer.y&&farmer.angle==0&&cnt!=1){ cout<<0; return 0; } if (cow.x==farmer.x&&cow.y==farmer.y){ cout<<cnt-1; return 0; } //angle=0 up //angle=90 -> //angle=180 down //angle=270 <- //cow move //0 if (cow.angle==0){ if (map[cow.y-1][cow.x]!='*'&&cow.y!=0){ cow.y--; }else{ cow.angle+=90; goto t; } } //90 if (cow.angle==90){ if (map[cow.y][cow.x+1]!='*'&&cow.x!=9){ cow.x++; }else{ cow.angle+=90; goto t; } } //180 if (cow.angle==180){ if (map[cow.y+1][cow.x]!='*'&&cow.y!=9){ cow.y++; }else{ cow.angle+=90; goto t; } } //270 if (cow.angle==270){ if (map[cow.y][cow.x-1]!='*'&&cow.x!=0){ cow.x--; }else{ cow.angle+=90; goto t; } } t: //farmer move //0 if (farmer.angle==0){ if (map[farmer.y-1][farmer.x]!='*'&&farmer.y!=0){ farmer.y--; }else{ farmer.angle+=90; goto g; } } //90 if (farmer.angle==90){ if (map[farmer.y][farmer.x+1]!='*'&&farmer.x!=9){ farmer.x++; }else{ farmer.angle+=90; goto g; } } //180 if (farmer.angle==180){ if (map[farmer.y+1][farmer.x]!='*'&&farmer.y!=9){ farmer.y++; }else{ farmer.angle+=90; goto g; } } //270 if (farmer.angle==270){ if (map[farmer.y][farmer.x-1]!='*'&&farmer.x!=0){ farmer.x--; }else{ farmer.angle+=90; goto g; } } g: cow.angle%=360; farmer.angle%=360; //printf("%d %d %d %d\n",cow.x,cow.y,farmer.x,farmer.y); } cout<<0; return 0; } /**#include <iostream> using namespace std; char map[10][10]; struct cowed{ int x,y,angle=0; }; struct farmered{ int x,y,angle=0; }; int cnt=0; 012345678 9 -> x eg. * is in map[0][0] 0 *...*.... . 1 ......*.. . 2 ...*...*. . 3 ......... . 4 ...*.F... . 5 *.....*.. . 6 ...*..... . 7 ..C...... * 8 ...*.*... . 9 .*.*..... . -> y cowed cow; farmered farmer; int main() { for (int i=0;i<10;i++){ cin>>map[i]; } //find cow for (int i=0;i<10;i++){ for (int j=0;j<10;j++){ if (map[i][j]=='C'){ cow.x=j; cow.y=i; break; } } } //find farmer for (int i=0;i<10;i++){ for (int j=0;j<10;j++){ if (map[i][j]=='F'){ farmer.x=j; farmer.y=i; break; } } } //printf("%d %d %d %d",cow.x,cow.y,farmer.x,farmer.y); //int a; //cin>>a; //move while (++cnt||cnt<=200000){ //cout<<2; if (cow.x==farmer.x&&cow.y==farmer.y){ cout<<cnt-1; return 0; } //angle=0 up //angle=90 -> //angle=180 down //angle=270 <- //cow move //0 if (cow.angle==0){ if (map[cow.y-1][cow.x]!='*'&&cow.y!=0){ cow.y--; }else{ cow.angle+=90; goto t; } } //90 if (cow.angle==90){ if (map[cow.y][cow.x+1]!='*'&&cow.x!=9){ cow.x++; }else{ cow.angle+=90; goto t; } } //180 if (cow.angle==180){ if (map[cow.y+1][cow.x]!='*'&&cow.y!=9){ cow.y++; }else{ cow.angle+=90; goto t; } } //270 if (cow.angle==270){ if (map[cow.y][cow.x-1]!='*'&&cow.x!=0){ cow.x--; }else{ cow.angle+=90; goto t; } } t: //farmer move //0 if (farmer.angle==0){ if (map[farmer.y-1][farmer.x]!='*'&&farmer.y!=0){ farmer.y--; }else{ farmer.angle+=90; goto g; } } //90 if (farmer.angle==90){ if (map[farmer.y][farmer.x+1]!='*'&&farmer.x!=9){ farmer.x++; }else{ farmer.angle+=90; goto g; } } //180 if (farmer.angle==180){ if (map[farmer.y+1][farmer.x]!='*'&&farmer.y!=9){ farmer.y++; }else{ farmer.angle+=90; goto g; } } //270 if (farmer.angle==270){ if (map[farmer.y][farmer.x-1]!='*'&&farmer.x!=0){ farmer.x--; }else{ farmer.angle+=90; goto g; } } g: cow.angle%=360; farmer.angle%=360; //printf("%d %d %d %d\n",cow.x,cow.y,farmer.x,farmer.y); } cout<<0; return 0; }**/ ```
by love20110429 @ 2024-03-17 19:56:59


|