Submission #00053


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
import java.io.*;
import java.util.*;
import java.util.function.*;
import java.util.stream.*;
class UF{
public int[] uni;
public UF(int size){
Arrays.fill(uni=new int[size],-1);
}
public int root(int t){
return uni[t]<0?t:(uni[t]=root(uni[t]));
}
public boolean connect(int p,int c){
p=root(p);
c=root(c);
if(p==c)
return false;
if(uni[p]>uni[c]){
int buf=c;
c=p;
p=buf;
}
uni[p]+=uni[c];
uni[c]=p;
return true;
}
public boolean isConnected(int a,int b){
return root(a)==root(b);
}
public int groupSize(int t){
return -uni[root(t)];
}
}
public class Main{
static FastScanner s=new FastScanner(System.in);
int[] dx={-1,1,0,0};
int[] dy={0,0,-1,1};
int h=gInt(),w=gInt();
char[][] f=new char[h][w];
UF uf=new UF(h*w);
void f(int a,int b,int v){
for(int i=Math.max(a-v,0),ie=Math.min(h-1,a+v);i<=ie;++i){
for(int j=Math.max(b-v,0),je=Math.min(w-1,b+v);j<=je;++j){
if(f[i][j]=='#')
f[i][j]='.';
}
}
}
void solve(){
for(int i:rep(h)){
s.next().getChars(0,w,f[i],0);
}
for(int i:rep(h)){
for(int j:rep(w)){
if(f[i][j]!='#'){
f(i,j,f[i][j]-'0');
}
}
}
for(int i:rep(h)){
for(int j:rep(w)){
if(f[i][j]!='#'){
for(int d=0;d<4;++d){
int x=j+dx[d];
int y=i+dy[d];
if(0<=x&&x<w&&0<=y&&y<h&&f[y][x]!='#'){
uf.connect(i*w+j,y*w+x);
}
}
}
}
}
//Arrays.stream(f).forEach(System.out::println);
for(int i:rep(gInt())){
System.out.println(uf.isConnected(gInt()+gInt()*w,gInt()+gInt()*w)
?"yes"
:"no");
}
}
public static void main(String[] $){
new Main().solve();
}
int gInt(){
return s.nextInt();
}
long gLong(){
return s.nextLong();
}
double gDouble(){
return Double.parseDouble(s.next());
}
SupplyingIterator<Integer> ints(int n){
return new SupplyingIterator<>(n,this::gInt);
}
SupplyingIterator<Long> longs(int n){
return new SupplyingIterator<>(n,this::gLong);
}
SupplyingIterator<Double> doubles(int n){
return new SupplyingIterator<>(n,this::gDouble);
}
SupplyingIterator<String> strs(int n){
return new SupplyingIterator<>(n,s::next);
}
Range rep(int i){
return Range.rep(i);
}
Range rep(int f,int t,int d){
return Range.rep(f,t,d);
}
Range rep(int f,int t){
return rep(f,t,1);
}
Range rrep(int f,int t){
return rep(t,f,-1);
}
IntStream INTS(int n){
return IntStream.generate(this::gInt).limit(n);
}
Stream<String> STRS(int n){
return Stream.generate(s::next).limit(n);
}
}
class FastScanner{
private final BufferedInputStream in;
private static final int bufSize=1<<16;
private final byte buf[]=new byte[bufSize];
private int i=bufSize,k=bufSize;
private final StringBuilder str=new StringBuilder();
FastScanner(InputStream in){
this.in=new BufferedInputStream(in,bufSize);
}
int nextInt(){
return (int)nextLong();
}
long nextLong(){
int c;
long x=0;
boolean sign=true;
while((c=nextChar())<=32)
;
if(c=='-'){
sign=false;
c=nextChar();
}
if(c=='+'){
c=nextChar();
}
while(c>='0'){
x=x*10+(c-'0');
c=nextChar();
}
return sign?x:-x;
}
private int nextChar(){
if(i==k){
try{
k=in.read(buf,i=0,bufSize);
}catch(IOException e){
System.exit(-1);
}
}
return i>=k?-1:buf[i++];
}
String next(){
int c;
str.setLength(0);
while((c=nextChar())<=32&&c!=-1)
;
if(c==-1)
return null;
while(c>32){
str.append((char)c);
c=nextChar();
}
return str.toString();
}
String nextLine(){
int c;
str.setLength(0);
while((c=nextChar())<=32&&c!=-1)
;
if(c==-1)
return null;
while(c!='\n'){
str.append((char)c);
c=nextChar();
}
return str.toString();
}
}
class SupplyingIterator<T> implements Iterable<T>,Iterator<T>{
private int remain;
Supplier<T> supplier;
SupplyingIterator(int t,Supplier<T> supplier){
this.remain=t;
this.supplier=supplier;
}
@Override
public Iterator<T> iterator(){
return this;
}
@Override
public boolean hasNext(){
return remain>0;
}
@Override
public T next(){
--remain;
return supplier.get();
}
}
class Range implements Iterable<Integer>,PrimitiveIterator.OfInt{
public final int from,to,d;
private int cur;
Range(int from,int to,int d){
this.from=from;
this.cur=from-d;
this.to=to;
this.d=d;
}
Range(int n){
this(0,n-1,1);
}
@Override
public Iterator<Integer> iterator(){
return this;
}
@Override
public boolean hasNext(){
return cur+d==to||(cur!=to&&(cur<to==cur+d<to));
}
@Override
public int nextInt(){
return cur+=d;
}
protected final int CHARACTERISTICS=Spliterator.SIZED|Spliterator.DISTINCT|Spliterator.IMMUTABLE|Spliterator.NONNULL;
@Override
public Spliterator.OfInt spliterator(){
return Spliterators.spliterator(this,(to-from)/d+1,CHARACTERISTICS);
}
IntStream stream(){
return d==1?IntStream.rangeClosed(from,to):java.util.stream.StreamSupport.intStream(this.spliterator(),false);
}
static Range rep(int i){
return new Range(i);
}
static Range rep(int f,int t,int d){
return new Range(f,t,d);
}
static Range rep(int f,int t){
return rep(f,t,1);
}
static Range rrep(int f,int t){
return rep(t,f,-1);
}
}

ステータス

項目 データ
問題 0002 - 韓流ハゲ
ユーザー名 fal_rnd
投稿日時 2018-08-22 11:05:53
言語 Java
状態 Accepted
得点 10
ソースコード長 5485 Byte
最大実行時間 238 ms
最大メモリ使用量 25868 KB

セット

セット 得点 Cases
1 ALL 10 / 10 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
in00.dat AC 115 ms 13800 KB
1
in01.dat AC 106 ms 15668 KB
1
in02.dat AC 107 ms 15692 KB
1
in03.dat AC 115 ms 13964 KB
1
in04.dat AC 113 ms 14228 KB
1
in05.dat AC 117 ms 17100 KB
1
in06.dat AC 138 ms 17220 KB
1
in07.dat AC 186 ms 23616 KB
1
in08.dat AC 180 ms 23992 KB
1
in09.dat AC 198 ms 25700 KB
1
in10.dat AC 219 ms 23676 KB
1
in11.dat AC 214 ms 23920 KB
1
in12.dat AC 203 ms 24028 KB
1
in13.dat AC 207 ms 25868 KB
1
in14.dat AC 227 ms 25760 KB
1
in15.dat AC 238 ms 24104 KB
1