hdu 4452 37届金华赛区 K题

题意:给一个n*n的格子,1在左上角,2在右下角,每个人有一个初始速度和方向,若遇到边缘,则朝相反方向前进,若两个人相遇则交换方向(注意方向改变后,人仍然需要移动),同时,每个人每过t1,t2时间就会朝左转向,求K秒时那个人所在的方向

模拟,看起来比较麻烦,实际写起来还是比较好写的

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<queue>
 6 #include<map>
 7 using namespace std;
 8 #define MOD 1000000007
 9 const double eps=1e-5;
10 #define cl(a) memset(a,0,sizeof(a))
11 #define ts printf("*****
");
12 const int MAXN=1005;
13 int n,m,tt,K,v1,v2;
14 int dir1,dir2,t1,t2;  //0北,1西,2南,3东
15 int x1,y1;
16 int x2,y2;
17 void fun(int t)
18 {
19     if(x1==x2&&y1==y2)  swap(dir1,dir2);
20     else
21     {
22         if(t!=0&&t%t1==0)    dir1+=1,dir1%=4;
23         if(t!=0&&t%t2==0)    dir2+=1,dir2%=4;
24     }
25 
26     for(int i=0;i<v1;i++)
27     {
28         if(dir1==0&&x1==1)dir1=2;
29         if(dir1==1&&y1==1)dir1=3;
30         if(dir1==2&&x1==n)dir1=0;
31         if(dir1==3&&y1==n)dir1=1;
32 
33         if(dir1==0)x1--;
34         else if(dir1==1)y1--;
35         else if(dir1==2)x1++;
36         else y1++;
37     }
38     for(int i=0;i<v2;i++)
39     {
40         if(dir2==0&&x2==1)dir2=2;
41         if(dir2==1&&y2==1)dir2=3;
42         if(dir2==2&&x2==n)dir2=0;
43         if(dir2==3&&y2==n)dir2=1;
44 
45         if(dir2==0)x2--;
46         else if(dir2==1)y2--;
47         else if(dir2==2)x2++;
48         else y2++;
49     }
50 }
51 int main()
52 {
53     int i,j,k;
54     #ifndef ONLINE_JUDGE
55     freopen("1.in","r",stdin);
56     #endif
57     while(scanf("%d",&n)!=EOF)
58     {
59         if(n==0)    break;
60         char di[5];
61         x1=1,y1=1;
62         x2=n,y2=n;
63 
64 
65         scanf("%s%d%d",di,&v1,&t1);
66         if(di[0]=='N')  dir1=0;
67         else if(di[0]=='W')  dir1=1;
68         else if(di[0]=='S')  dir1=2;
69         else dir1=3;
70 
71 
72         scanf("%s%d%d",di,&v2,&t2);
73         if(di[0]=='N')  dir2=0;
74         else if(di[0]=='W')  dir2=1;
75         else if(di[0]=='S')  dir2=2;
76         else dir2=3;
77 
78 
79         scanf("%d",&K);
80         for(i=0;i<K;i++)
81         {
82             fun(i);  //每秒钟的运动情况
83         }
84         printf("%d %d
",x1,y1);
85         printf("%d %d
",x2,y2);
86     }
87 }
原文地址:https://www.cnblogs.com/cnblogs321114287/p/4437723.html