Problem A: Ennichi
より
import java.util.*;
import java.lang.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
public class Main{
Scanner sc=new Scanner(System.in);
final int INF=1>>30;
final double EPS=1e-9;
int h, w, n;
char[][] a;
void run(){
h=sc.nextInt();
w=sc.nextInt();
n=sc.nextInt();
a=new char[h][w];
for(int j=0; j<h; j++){
String s=sc.next();
for(int i=0; i<w; i++){
a[j][i]=s.charAt(i);
}
}
for(int j=0; j<h; j++){
for(int i=0; i<w-1; i++){
if(a[j][i]==a[j][i+1])
continue;
// swap(i,j)<->(i+1,j)
char c=a[j][i];
a[j][i]=a[j][i+1];
a[j][i+1]=c;
if(check()){
println("YES");
return;
}
c=a[j][i];
a[j][i]=a[j][i+1];
a[j][i+1]=c;
}
}
println("NO");
}
void show(char[][] a){
for(int j=0; j<h; j++){
for(int i=0; i<w; i++){
print(a[j][i]+"");
}
println("");
}
}
boolean check(){
boolean[][] clear;
char[][] a=new char[h][w];
for(int j=0; j<h; j++)
for(int i=0; i<w; i++)
a[j][i]=this.a[j][i];
for(;;){
// 落下
for(int i=0; i<w; i++){
for(int j=1; j<h; j++){
if(a[j][i]!='.')
continue;
for(int k=j; k>0; k--)
a[k][i]=a[k-1][i];
a[0][i]='.';
}
}
boolean cl=false;
clear=new boolean[h][w];
for(int y=0; y<h; y++){
for(int x=0; x<w; x++){
// (x, y)から縦/横を調べる
if(a[y][x]=='.')
continue;
boolean f=true;
for(int y2=y; y2<y+n; y2++){
if(y2>=h||a[y2][x]!=a[y][x]){
f=false;
break;
}
}
if(f){
for(int y2=y; y2<h&&a[y2][x]==a[y][x]; y2++)
clear[y2][x]=true;
cl=true;
}
f=true;
for(int x2=x; x2<x+n; x2++){
if(x2>=w||a[y][x2]!=a[y][x]){
f=false;
break;
}
}
if(f){
for(int x2=x; x2<w&&a[y][x2]==a[y][x]; x2++)
clear[y][x2]=true;
cl=true;
}
}
}
for(int j=0; j<h; j++)
for(int i=0; i<w; i++)
if(clear[j][i])
a[j][i]='.';
if(!cl)
break;
}
for(int j=0; j<h; j++)
for(int i=0; i<w; i++)
if(a[j][i]!='.')
return false;
return true;
}
public static void main(String[] args){
new Main().run();
}
void print(String s){
System.out.print(s);
}
void println(String s){
System.out.println(s);
}
void println(){
System.out.println();
}
}
0 件のコメント:
コメントを投稿