QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#299312 | #5509. Kooky Tic-Tac-Toe | ushg8877 | AC ✓ | 493ms | 3556kb | C++14 | 2.4kb | 2024-01-06 18:50:02 | 2024-01-06 18:50:02 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll _=8;
string so,sx;
char s[_][_];
pair<int,int>ed;
vector<pair<int,int> >v[2];
int T,n,k,lf,fl,h[_][_],c[2],dx[_]={-1,-1,-1,0,0,1,1,1},dy[_]={-1,0,1,-1,1,-1,0,1};
bool work(int X,int Y){
char o=s[X][Y];s[X][Y]=lf='.';
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int d=0;d<8;d++){
string t="";int x=i,y=j;
for(int w=0;w<k;w++){
t+=s[x][y];x+=dx[d];y+=dy[d];
if(x>n||y>n||!x||!y)break;
}
if(t==so)lf='o';
if(t==sx)lf='x';
if(lf!='.'){s[X][Y]=o;return 0;}
}
s[X][Y]=o;return 1;
}
void ssh(bool x){
for(int i=0;i<v[x].size();i++)
if(v[x][i]==ed){
swap(v[x][i],v[x][v[x].size()-1]);
break;
}
}
void out(bool x,bool y){
//cout<<x<<' '<<y<<'\n';
for(int i=0;i<v[x^y].size();i++){
cout<<v[x^y^1][i].first<<' '<<v[x^y^1][i].second<<'\n';
cout<<v[x^y][i].first<<' '<<v[x^y][i].second<<'\n';
}
if(y)cout<<ed.first<<' '<<ed.second<<'\n';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
cin>>n>>k;fl=2;c[0]=c[1]=0;v[0].clear();v[1].clear();so=sx="";ed={0,0};memset(h,0,sizeof(h));
for(int i=1;i<=k;i++)so+="o",sx+="x";
for(int i=1;i<=n;i++)cin>>(s[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(s[i][j]=='o')c[0]++,v[0].push_back({i,j});
else if(s[i][j]=='x')c[1]++,v[1].push_back({i,j});
if(abs(c[0]-c[1])>1)cout<<"NIE\n";
else{
if(c[0]>c[1])fl=0;
if(c[0]<c[1])fl=1;
lf='.';
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int d=0;d<8;d++){
string t="";int x=i,y=j;
for(int w=0;w<k;w++){
t+=s[x][y];x+=dx[d];y+=dy[d];
if(x>n||y>n||!x||!y)break;
}
if(t==so)lf='o';
if(t==sx)lf='x';
if(lf!='.'){
x=i;y=j;lf='.';
for(int w=0;w<k;w++)h[x][y]=1,x+=dx[d],y+=dy[d];
}
}
//for(int i=1;i<=n;i++,cout<<'\n')
// for(int j=1;j<=n;j++)cout<<h[i][j]<<' ';
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(work(i,j)&&(c[0]+c[1]==n*n||h[i][j])&&(fl==2||fl==1&&s[i][j]=='x'||fl==0&&s[i][j]=='o'))ed={i,j};
if(ed.first==0&&ed.second==0)cout<<"NIE\n";
else{
cout<<"TAK\n";//<<ed.first<<' '<<ed.second<<'\n';
if(s[ed.first][ed.second]=='x')ssh(1);
else ssh(0);
if(s[ed.first][ed.second]=='x')out(1,(c[0]+c[1])&1);
else out(0,(c[0]+c[1])&1);
}
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3556kb
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 1 1 1 3 2 1 3 1 2 2 3 3 2 3 TAK 1 1 2 4 1 2 3 3 1 4 4 2 TAK 1 2 1 1 1 3 2 2 2 1 2 3 3 2 3 1 3 3 NIE NIE NIE NIE
result:
ok correct (7 test cases)
Test #2:
score: 0
Accepted
time: 53ms
memory: 3440kb
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 1 1 1 3 2 1 3 1 2 2 3 3 2 3 TAK 1 2 1 1 1 3 2 2 2 1 2 3 3 2 3 1 3 3 NIE NIE NIE NIE NIE TAK 2 2 1 1 3 1 1 2 3 2 1 3 NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE NIE TAK 1 2 1 1 1 3 1 4 2 3 2 2 2 4 4 1 3 1 4 2 3 2 4 3 NIE NIE NIE NIE NIE TAK 2 1 1 1 2 3 4 3 2 4 1 3 3 1 1 4 3 3 2 2 ...
result:
ok correct (10000 test cases)
Test #3:
score: 0
Accepted
time: 493ms
memory: 3504kb
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 1 6 1 1 2 2 1 3 2 4 1 4 3 1 2 1 3 2 2 6 3 3 3 4 3 6 4 4 4 1 5 3 4 5 5 4 5 6 5 5 6 1 6 5 6 3 6 4 NIE TAK 1 3 1 1 1 5 2 1 2 6 2 2 3 1 2 4 3 2 3 4 4 2 3 5 4 4 5 1 4 5 5 2 6 3 5 4 6 2 6 4 5 3 NIE TAK 1 1 1 2 1 4 1 3 2 3 1 5 2 4 1 6 3 1 2 1 3 2 2 2 3 5 2 5 3 6 2 6 4 2 3 3 4 5 3 4 4 6 4 1 5 2 4 3 5 4 ...
result:
ok correct (10000 test cases)