QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#87394 | #5509. Kooky Tic-Tac-Toe | chiranko# | AC ✓ | 18ms | 3564kb | C++20 | 3.3kb | 2023-03-12 19:56:52 | 2023-03-12 19:57:08 |
Judging History
answer
#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline int read(){
int x=0,f=1;char ch=' ';
while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return f==1?x:-x;
}
const int N=100;
int T,n,k;
char s[N][N];
inline bool check_win(char c){
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(s[i][j]!=c)continue;
if(i+k-1<=n && j+k-1<=n){
int flag=1;
for(int t=1;t<k;++t){
if(s[i+t][j+t]!=c){
flag=0;
break;
}
}
if(flag)return 1;
}
if(i+k-1<=n && j-k+1>=1){
int flag=1;
for(int t=1;t<k;++t){
if(s[i+t][j-t]!=c){
flag=0;
break;
}
}
if(flag)return 1;
}
if(i+k-1<=n){
int flag=1;
for(int t=1;t<k;++t){
if(s[i+t][j]!=c){
flag=0;
break;
}
}
if(flag)return 1;
}
if(j+k-1<=n){
int flag=1;
for(int t=1;t<k;++t){
if(s[i][j+t]!=c){
flag=0;
break;
}
}
if(flag)return 1;
}
}
}
return 0;
}
int px[2][N],py[2][N];
int main(){
T=read();
while(T--){
n=read();k=read();
int tot=0,cntx=0,cnto=0;
for(int i=1;i<=n;++i){
scanf("%s",s[i]+1);
for(int j=1;j<=n;++j){
tot+=(s[i][j]=='.');
cntx+=(s[i][j]=='x');
cnto+=(s[i][j]=='o');
}
}
bool s1=check_win('x'),s2=check_win('o');
bool full=(bool)(tot==0);
if(s1 && s2){
printf("NIE\n");
continue;
}
if(abs(cntx-cnto)>1){
printf("NIE\n");
continue;
}
if(!s1 && !s2){
if(!full){
printf("NIE\n");
continue;
}
int lenx=0,leno=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(s[i][j]=='x'){
px[0][++lenx]=i;
py[0][lenx]=j;
}
else{
px[1][++leno]=i;
py[1][leno]=j;
}
}
}
int cur;
if(lenx>=leno)cur=0;
else cur=1;
printf("TAK\n");
int now=n*n;
while(now--){
if(!cur){
printf("%d %d\n",px[cur][lenx],py[cur][lenx]);
lenx--;
}
else{
printf("%d %d\n",px[cur][leno],py[cur][leno]);
leno--;
}
cur^=1;
}
continue;
}
if(s2){
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(s[i][j]!='.'){
s[i][j]='x'+'o'-s[i][j];
}
}
}
swap(cnto,cntx);
}
if(cntx<cnto){
printf("NIE\n");
continue;
}
int sx=0,sy=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(s[i][j]=='x'){
s[i][j]='.';
if(!check_win('x')){
sx=i;
sy=j;
break;
}
s[i][j]='x';
}
}
if(sx)break;
}
if(!sx){
printf("NIE\n");
continue;
}
int lenx=0,leno=0;
px[0][++lenx]=sx;
py[0][lenx]=sy;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(s[i][j]=='x'){
px[0][++lenx]=i;
py[0][lenx]=j;
}
else if(s[i][j]=='o'){
px[1][++leno]=i;
py[1][leno]=j;
}
}
}
int cur;
if(lenx>leno)cur=0;
else cur=1;
printf("TAK\n");
int now=n*n-tot;
while(now--){
if(!cur){
printf("%d %d\n",px[cur][lenx],py[cur][lenx]);
lenx--;
}
else{
printf("%d %d\n",px[cur][leno],py[cur][leno]);
leno--;
}
cur^=1;
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 3564kb
input:
7 3 3 x.o xxx o.o 4 3 xx.x ...o ..o. .o.. 3 3 xoo oxx xoo 3 2 xoo oxx xoo 3 3 xox .o. xox 3 2 xo. ..x xo. 3 3 x.. .x. ..x
output:
TAK 2 3 3 3 2 2 3 1 1 1 1 3 2 1 TAK 1 4 4 2 1 2 3 3 1 1 2 4 TAK 3 3 3 1 3 2 2 3 2 1 2 2 1 3 1 1 1 2 NIE NIE NIE NIE
result:
ok correct (7 test cases)
Test #2:
score: 0
Accepted
time: 9ms
memory: 3528kb
input:
10000 3 3 x.o xxx o.o 3 3 xoo oxx xoo 3 2 xoo oxx xoo 3 3 xox .o. xox 3 2 xo. ..x xo. 3 2 oox .xo o.x 5 5 xxx.. xxo.x xoo.. xxxox .oooo 3 3 xxx .o. oo. 3 2 x.o xo. ..o 3 2 ..x xxo .o. 3 3 xxo o.. oxo 3 2 oox ..x ... 3 3 xxo ... .ox 3 3 .xo ... oox 3 3 .x. xo. o.o 3 2 o.. xxo .ox 3 2 x.x xoo x.o 3 2 ...
output:
TAK 2 3 3 3 2 2 3 1 1 1 1 3 2 1 TAK 3 3 3 1 3 2 2 3 2 1 2 2 1 3 1 1 1 2 NIE NIE NIE NIE NIE TAK 3 2 1 3 3 1 1 2 2 2 1 1 NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE TAK 3 2 4 3 3 1 4 2 2 4 2 2 2 3 1 4 1 3 1 1 1 2 4 1 NIE NIE NIE NIE NIE TAK 4 4 4 3 4 1 4 2 3 4 3 2 3 3 2 2 3 1 1 4 ...
result:
ok correct (10000 test cases)
Test #3:
score: 0
Accepted
time: 18ms
memory: 3528kb
input:
10000 6 4 x.xx.o xo.o.x ooox.o o..xo. ..xxxo o.oxx. 6 5 oooxxx oxoxxo xoooxo xoxxxx xooxox xoxxxx 6 3 o.x.x. oo.o.x xx.oo. .x.xx. ooxo.. .xxo.. 6 6 xoo..o o.xx.x oooooo xx.x.. o..xx. ...xxx 6 5 xooxoo ooxxoo xxooxx oxooxx oxoxxx xxoxoo 6 5 xoxxxo ooooxo ooxoxx oxxoox xxxxox ooooxo 6 5 o....o .ox.oo ...
output:
TAK 6 3 6 5 6 1 6 4 5 6 5 5 4 5 5 4 4 1 5 3 3 6 4 4 3 3 2 6 3 2 2 1 3 1 1 4 2 4 1 3 2 2 1 1 1 6 3 4 NIE TAK 6 3 6 4 6 2 5 4 4 5 5 2 4 4 5 1 4 2 3 5 3 2 3 4 3 1 2 4 2 6 2 2 1 5 2 1 1 3 1 1 5 3 NIE TAK 6 4 6 6 6 2 6 5 6 1 6 3 5 6 5 3 5 5 5 1 5 4 4 4 5 2 4 3 4 6 4 1 4 5 3 4 4 2 3 3 3 6 2 6 3 5 2 5 3 2 ...
result:
ok correct (10000 test cases)