hdu 4452

今天模拟赛的一个模拟题;

每次看到这种题就感觉很繁琐;

这次静下心来写写,感觉还不错!就是很多错误,浪费了一点时间;

代码:

 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
",r[i].y,r[i].x);
75     }
76     return 0;
77 }
View Code
原文地址:https://www.cnblogs.com/yours1103/p/3329292.html