遭遇战
遭遇戰
【問題描述】
小林和小華在一個n*n 的矩形方格里玩游戲,矩形左上角為(0,0),右下角為(n-1,n-
1)。兩人同時進入地圖的隨機位置,并以相同速度進行走位。為了隱蔽性,兩人都不會再走
自己走過的格子。如果兩人向某一方向前進,那么他們會跑到不能跑為止,當不能跑的時候,
小林會向右轉,小華則會向左轉,如果不能跑,則不再動。 現在已知兩人進入地圖的初始
位置和方向,請算出兩人遭遇的位置。
【輸入】
第一行一個正整數t,表示測試數據的組數。
接下來的t 組數據,每組數據的第一行包含1 個整數n,。
第二行包含三個整數,x、y 和d,表示小林的初始位置和一開始跑的方向。其中d=0 表
示東;d=1 表示南;d=2 表示西;d=3 表示北。
第三行與第二行格式相同,但描述的是小華。
【輸出】
輸出t 行,若會遭遇,則包含兩個整數,表示他們第一次相遇的格子的坐標,否則輸出
“-1”。
【輸入輸出樣例】
fight.in
2
2
0 0 0
0 1 2
4
0 1 0
3 2 0
fight.out
-1
1 3
考試第一題(驚了)剛了兩個多小時。。。純模擬。。。呵呵:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int k,n;
4 int x_1,y_1,z_1,x_2,y_2,z_2;
5 int biao_ji1=1,biao_ji2=1;
6 int b1[1100][1100],b2[1100][1100];
7 int main()
8 {
9 cin>>k;
10 while(k)
11 {
12 cin>>n;
13 cin>>x_1>>y_1>>z_1;//讀入
14 cin>>x_2>>y_2>>z_2;
15 biao_ji1=biao_ji2=1;//默認能走
16 memset(b1,0,sizeof(b1));
17 memset(b2,0,sizeof(b2));
18 while((x_1!=x_2||y_1!=y_2)&&(biao_ji1||biao_ji2))//循環先前走
19 {
20 b1[x_1][y_1]=1;//標記
21 b2[x_2][y_2]=1;
22 if(biao_ji1)//如果小林能走
23 {
24 if(z_1==3)//根據題意去試
25 {
26 if(x_1-1>=0&&b1[x_1-1][y_1]==0) x_1--;
27 else
28 {
29 z_1=0;
30 if(y_1+1<n&&b1[x_1][y_1+1]==0) y_1++;
31 else biao_ji1=0;//表示無法再走
32 }
33 }
34 else if(z_1==0)
35 {
36 if(y_1+1<n&&b1[x_1][y_1+1]==0) y_1++;
37 else
38 {
39 z_1=1;
40 if(x_1+1<n&&b1[x_1+1][y_1]==0) x_1++;
41 else biao_ji1=0;
42 }
43 }
44 else if(z_1==1)
45 {
46 if(x_1+1<n&&b1[x_1+1][y_1]==0) x_1++;
47 else
48 {
49 z_1=2;
50 if(y_1-1>=0&&b1[x_1][y_1-1]==0) y_1--;
51 else biao_ji1=0;
52 }
53 }
54 else
55 {
56 if(y_1-1>=0&&b1[x_1][y_1-1]==0) y_1--;
57 else
58 {
59 z_1=3;
60 if(x_1-1>=0&&b1[x_1-1][y_1]==0) x_1--;
61 else biao_ji1=0;
62 }
63 }
64 }
65 if(biao_ji2)//同上
66 {
67 if(z_2==3)
68 {
69 if(x_2-1>=0&&b2[x_2-1][y_2]==0) x_2--;
70 else
71 {
72 z_2=2;
73 if(y_2-1>=0&&b2[x_2][y_2-1]==0) y_2--;
74 else biao_ji2=0;
75 }
76 }
77 else if(z_2==0)
78 {
79 if(y_2+1<n&&b2[x_2][y_2+1]==0) y_2++;
80 else
81 {
82 z_2=3;
83 if(x_2-1>=0&&b2[x_2-1][y_2]==0) x_2--;
84 else biao_ji2=0;
85 }
86 }
87 else if(z_2==1)
88 {
89 if(x_2+1<n&&b2[x_2+1][y_2]==0) x_2++;
90 else
91 {
92 z_2=0;
93 if(y_2+1<n&&b2[x_2][y_2+1]==0) y_2++;
94 else biao_ji2=0;
95 }
96 }
97 else
98 {
99 if(y_2-1>=0&&b2[x_2][y_2-1]==0) y_2--;
100 else
101 {
102 z_2=1;
103 if(x_2+1<n&&b2[x_2+1][y_2]==0) x_2++;
104 else biao_ji2=0;
105 }
106 }
107 }
108 }
109 if(x_1==x_2&&y_1==y_2) cout<<x_1<<" "<<y_1;
110 else cout<<-1;
111 cout<<endl;
112 k--;
113 }
114 }
呵呵呵呵呵呵呵呵呵呵呵呵呵......................
總結
- 上一篇: 如何正确看待原子弹爆炸
- 下一篇: 如何理性看待中国留学生对广岛原爆的评价?