uva 10010 - Where's Waldorf?
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=951 题意:给出一个由大小写字母组成的二维maze…给出k个询问。每个询问一个单词。问能否在maze中找到这个单词。不区分大小写。输出开头字母的坐标(从1开始)。如果有多组输出最上面的。如果还有多组,输出最左边的。数据保证至少有一组。 思路:直接找就好了。。。坑的地方是。。。格式。。数据组数之后会有一个空行。然后每两组读入数据之间会有一个空行。。输出的时候每两组数据之间也有一个空行。
我因为一直多输出了一个空行一直wa QAQ
=
1/* ***********************************************
2Author :111qqz
3Created Time :2016年01月21日 星期四 14时52分51秒
4File Name :code/uva/10010.cpp
5************************************************ */
6
7#include <cstdio>
8#include <cstring>
9#include <iostream>
10#include <algorithm>
11#include <vector>
12#include <queue>
13#include <set>
14#include <map>
15#include <string>
16#include <cmath>
17#include <cstdlib>
18#include <ctime>
19#define fst first
20#define sec second
21#define lson l,m,rt<<1
22#define rson m+1,r,rt<<1|1
23#define ms(a,x) memset(a,x,sizeof(a))
24typedef long long LL;
25#define pi pair < int ,int >
26#define MP make_pair
27
28using namespace std;
29const double eps = 1E-8;
30const int dx4[4]={1,0,0,-1};
31const int dy4[4]={0,-1,1,0};
32const int inf = 0x3f3f3f3f;
33const int N=80;
34int n,m;
35char maze[N][N];
36string spa;
37int k;
38char target[100];
39char nouse[55];
40
41
42bool hang( int x,int y,char tar[])
43{
44 int len = strlen(tar);
45 // cout<<"tar:"<<tar<<endl;
46 if (y+len-1>=m) return false;
47 int cnt = 0 ;
48 for ( int j = y ; j < y+len; j++)
49 {
50 if (maze[x][j]!=tar[cnt])
51 return false;
52 cnt++;
53 }
54
55 cout<<x+1<<" "<<y+1<<endl;
56 return true;
57}
58bool rhang( int x,int y,char tar[])
59{
60 int len = strlen(tar);
61 if (y-len+1<0) return false;
62 int cnt = 0 ;
63 for ( int j = y ; j >=y-len+1 ; j-- )
64 {
65
66 if (maze[x][j]!=tar[cnt])
67 return false;
68 cnt++;
69 }
70 cout<<x+1<<" "<<y+1<<endl;
71 return true;
72}
73
74bool lie( int x,int y,char tar[])
75{
76 int len = strlen(tar);
77 int cnt = 0 ;
78 if (x+len-1>=n) return false;
79 for ( int i = x ; i < x + len ; i++)
80 {
81 if (maze[i][y]!=tar[cnt])
82 return false;
83 cnt++;
84 }
85
86 cout<<x+1<<" "<<y+1<<endl;
87 return true;
88}
89
90bool rlie( int x,int y,char tar[])
91{
92 int len = strlen(tar);
93 int cnt = 0 ;
94 if (x-len+1<0) return false;
95 for ( int i = x ; i>=x-len+1 ; i --)
96 {
97 if (maze[i][y]!=tar[cnt]) return false;
98 cnt++;
99 }
100 cout<<x+1<<" "<<y+1<<endl;
101 return true;
102
103}
104
105bool zx( int x,int y, char tar[])
106{
107 int len = strlen(tar);
108 int cnt = 0;
109 if (y+len-1>=m||x+len-1>=n) return false;
110
111 for ( int i = x ; i < x+len ; i++)
112 {
113 if (maze[i][y+cnt]!=tar[cnt]) return false;
114 cnt++;
115 }
116 cout<<x+1<<" "<<y+1<<endl;
117 return true;
118
119}
120
121bool rzx ( int x,int y,char tar[])
122{
123 int len = strlen(tar);
124 int cnt = 0 ;
125 if (y-len+1<0||x-len+1<0) return false;
126 for ( int i = x ; i >= x-len+1 ; i--)
127 {
128 if (maze[i][y-cnt]!=tar[cnt]) return false;
129 cnt++;
130 }
131 cout<<x+1<<" "<<y+1<<endl;
132 return true;
133}
134bool fx( int x,int y,char tar[])
135{
136 int len = strlen(tar);
137 int cnt = 0 ;
138 if (y-len+1<0||x+len-1>=m) return false;
139
140 for ( int i = x ; i < x+len ; i++)
141 {
142 if (maze[i][y-cnt]!=tar[cnt]) return false;
143 cnt++;
144 }
145 cout<<x+1<<" "<<y+1<<endl;
146 return true;
147}
148bool rfx( int x,int y,char tar[])
149{
150 int len = strlen(tar);
151 int cnt = 0 ;
152 if (x-len+1<0||y+len-1>=m) return false;
153
154 for ( int j = y ; j < y+len ; j++)
155 {
156 if (maze[x-cnt][y]!=tar[cnt]) return false;
157 cnt++;
158 }
159 cout<<x+1<<" "<<y+1<<endl;
160 return true;
161}
162
163int main()
164{
165 #ifndef ONLINE_JUDGE
166 freopen("code/in.txt","r",stdin);
167 #endif
168 int T;
169 scanf("%d",&T);
170 //getline(cin,spa);
171 scanf("*%s",nouse);
172 while (T--)
173 {
174 scanf("%d%d",&n,&m); //习惯用n表示行。。。与题目相反。
175 for ( int i = 0 ;i < n ; i++)
176 {
177 scanf("%s",maze[i]);
178 for ( int j = 0 ; j < m ; j++)
179 {
180 maze[i][j]=toupper(maze[i][j]);
181 }
182 }
183
184 //for ( int i = 0 ; i < n ; i++) cout<<maze[i]<<endl;
185
186 scanf("%d",&k);
187
188 while (k--)
189 {
190 scanf("%s",target);
191 int len ;
192 len = strlen(target);
193 bool ok = false;
194 for ( int i = 0 ;i < len ; i++) target[i] = toupper(target[i]);
195 // cout<<"target:"<<target<<endl;
196 for ( int i = 0 ; i < n ;i++)
197 {
198 for ( int j = 0 ; j < m ; j++)
199 {
200 if( rzx(i,j,target)||rlie(i,j,target)||rfx(i,j,target)||rhang(i,j,target)||hang(i,j,target)||fx(i,j,target)||lie(i,j,target)||zx(i,j,target))
201 {
202 ok = true;
203 break;
204 }
205 }
206 if (ok) break;
207 }
208 }
209
210 if (T!=0)
211 {
212 scanf("*%s",nouse);
213 cout<<endl;
214 }
215
216 }
217
218 #ifndef ONLINE_JUDGE
219 fclose(stdin);
220 #endif
221 return 0;
222}