标签:标记 接下来 memset clu 循环 测试 mes 开始 位置
遭遇战
【问题描述】
小林和小华在一个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 }
呵呵呵呵呵呵呵呵呵呵呵呵呵......................
标签:标记 接下来 memset clu 循环 测试 mes 开始 位置
原文地址:https://www.cnblogs.com/dai-jia-ye/p/9821520.html