遭遇战
遭遇戰(zhàn)
【問題描述】
小林和小華在一個(gè)n*n 的矩形方格里玩游戲,矩形左上角為(0,0),右下角為(n-1,n-
1)。兩人同時(shí)進(jìn)入地圖的隨機(jī)位置,并以相同速度進(jìn)行走位。為了隱蔽性,兩人都不會(huì)再走
自己走過的格子。如果兩人向某一方向前進(jìn),那么他們會(huì)跑到不能跑為止,當(dāng)不能跑的時(shí)候,
小林會(huì)向右轉(zhuǎn),小華則會(huì)向左轉(zhuǎn),如果不能跑,則不再動(dòng)。 現(xiàn)在已知兩人進(jìn)入地圖的初始
位置和方向,請(qǐng)算出兩人遭遇的位置。
【輸入】
第一行一個(gè)正整數(shù)t,表示測(cè)試數(shù)據(jù)的組數(shù)。
接下來的t 組數(shù)據(jù),每組數(shù)據(jù)的第一行包含1 個(gè)整數(shù)n,。
第二行包含三個(gè)整數(shù),x、y 和d,表示小林的初始位置和一開始跑的方向。其中d=0 表
示東;d=1 表示南;d=2 表示西;d=3 表示北。
第三行與第二行格式相同,但描述的是小華。
【輸出】
輸出t 行,若會(huì)遭遇,則包含兩個(gè)整數(shù),表示他們第一次相遇的格子的坐標(biāo),否則輸出
“-1”。
【輸入輸出樣例】
fight.in
2
2
0 0 0
0 1 2
4
0 1 0
3 2 0
fight.out
-1
1 3
考試第一題(驚了)剛了兩個(gè)多小時(shí)。。。純模擬。。。呵呵:
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;//默認(rèn)能走
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))//循環(huán)先前走
19 {
20 b1[x_1][y_1]=1;//標(biāo)記
21 b2[x_2][y_2]=1;
22 if(biao_ji1)//如果小林能走
23 {
24 if(z_1==3)//根據(jù)題意去試
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 }
呵呵呵呵呵呵呵呵呵呵呵呵呵......................
總結(jié)
- 上一篇: 如何正确看待原子弹爆炸
- 下一篇: 如何理性看待中国留学生对广岛原爆的评价?