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
| //code #1
#include<bits/stdc++.h>
using namespace std;
int d(int ai, int aj, int bi, int bj);
int n, p[2188][2188], ncnt[3];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>p[i][j];
int res=d(1, 1, n, n);
if(res!=2) ncnt[res+1]++;
cout<<ncnt[0]<<"\n"<<ncnt[1]<<"\n"<<ncnt[2];
}
int d(int ai, int aj, int bi, int bj){
int c[4]={0, 0, 0, 0};
if(bi-ai<2) return p[ai][aj];
int ridx=0, dif=(bi-ai+1)/3, res[9];
for(int i=0;i<3;i++) for(int j=0;j<3;j++)
c[d(ai+i*dif, aj+j*dif, ai+(i+1)*dif, aj+(j+1)*dif)+1]++;
for(int i=0;i<3;i++) if(c[i]==9) return i-1;
ncnt[0]+=c[0];
ncnt[1]+=c[1];
ncnt[2]+=c[2];
return 2;
}
//code #2
#include<bits/stdc++.h>
using namespace std;
int n, p[2188][2188], ncnt[3];
void d(int ai, int aj, int bi, int bj){
if(bi==ai){
ncnt[p[ai][aj]+1]++;
return;
}
int t=p[ai][aj], dif=(bi-ai+1)/3;
for(int i=ai;i<=bi;i++){
for(int j=aj;j<=bj;j++){
if(p[i][j]!=t){
t=p[i][j];
for(int k=0;k<3;k++) for(int l=0;l<3;l++)
d(ai+k*dif, aj+l*dif, ai+(k+1)*dif-1, aj+(l+1)*dif-1);
break;
}
}
if(t!=p[ai][aj]) break;
}
if(t==p[ai][aj]) ncnt[t+1]++;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>p[i][j];
d(1, 1, n, n);
cout<<ncnt[0]<<"\n"<<ncnt[1]<<"\n"<<ncnt[2];
}
|
Leave a comment