hdu 4452
今天模拟赛的一个模拟题;
每次看到这种题就感觉很繁琐;
这次静下心来写写,感觉还不错!就是很多错误,浪费了一点时间;
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 int d[4][2]= {{1,0},{0,1},{-1,0},{0,-1}}; 6 7 struct run 8 { 9 int x,y; 10 int s,p,d; 11 } r[2]; 12 int t,n; 13 void go() 14 { 15 bool flag; 16 for(int i=0; i<t; i++) 17 { 18 flag=1; 19 if(r[0].x==r[1].x&&r[0].y==r[1].y) 20 { 21 flag=0; 22 int a=r[0].d; 23 r[0].d=r[1].d; 24 r[1].d=a; 25 } 26 for(int j=0; j<2; j++) 27 { 28 if(i!=0&&(i%r[j].p==0)&&flag) 29 r[j].d=(r[j].d+3)%4; 30 r[j].x=r[j].x+d[r[j].d][0]*r[j].s; 31 if(r[j].x<=0) 32 { 33 r[j].x=(-r[j].x)+2; 34 r[j].d=0; 35 } 36 if(r[j].x>n) 37 { 38 r[j].x=n-(r[j].x-n); 39 r[j].d=2; 40 } 41 r[j].y=r[j].y+d[r[j].d][1]*r[j].s; 42 if(r[j].y<=0) 43 { 44 r[j].y=(-r[j].y)+2; 45 r[j].d=1; 46 } 47 if(r[j].y>n) 48 { 49 r[j].y=n-(r[j].y-n); 50 r[j].d=3; 51 } 52 } 53 } 54 } 55 char s[3]; 56 int main() 57 { 58 while(scanf("%d",&n)&&n) 59 { 60 for(int i=0; i<2; i++) 61 { 62 scanf("%s",&s); 63 if(s[0]=='E') r[i].d=0; 64 else if(s[0]=='S') r[i].d=1; 65 else if(s[0]=='W')r[i].d=2; 66 else if(s[0]=='N')r[i].d=3; 67 scanf("%d%d",&r[i].s,&r[i].p); 68 } 69 r[0].x=1,r[0].y=1; 70 r[1].x=n,r[1].y=n; 71 scanf("%d",&t); 72 go(); 73 for(int i=0; i<2; i++) 74 printf("%d %d\n",r[i].y,r[i].x); 75 } 76 return 0; 77 }