QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#117369 | #6309. Aqre | aakennes | WA | 5ms | 3768kb | C++14 | 2.5kb | 2023-07-01 02:34:48 | 2023-07-01 02:34:49 |
Judging History
answer
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
const int maxn=1e3+50,INF=0x3f3f3f3f;
int n,m,a[25][5][5],b[4][5]={{},{0,1,1,1,0},{0,1,0,1,1},{0,1,1,1,0}},c[5],ans[10][10],num,vis[9][9],kx[4]={0,1,0,-1},ky[4]={1,0,-1,0};
void DFS(int key,int x,int y,int maxx,int maxy){
if(x<1||x>maxx||y<1||y>maxy)return;
num++;vis[x][y]=1;
for(int i=0;i<4;++i){
int xx=x+kx[i],yy=y+ky[i],nowx=xx,nowy=yy;
if(xx>=5)xx-=4;
if(yy>=5)yy-=4;
if(a[key][xx][yy]&&!vis[nowx][nowy])DFS(key,nowx,nowy,maxx,maxy);
}
}
void Init(){
for(int i=1;i<=4;++i)c[i]=i;
int tot=0;
do{
++tot;
for(int i=1;i<=4;++i){
for(int j=1;j<=4;++j){
a[tot][i][j]=c[i]!=j;
}
}
}while(next_permutation(c+1,c+5));
for(int i=4;i<=7;++i){
for(int j=4;j<=7;++j){
for(int p=1;p<=tot;++p){
num=0;
memset(vis,0,sizeof(vis));
if(a[p][1][1])DFS(p,1,1,i,j);
else DFS(p,1,2,i,j);
/*for(int x=1;x<=4;++x){
for(int y=1;y<=4;++y){
cout<<a[p][x][y];
}
cout<<endl;
}
cout<<num<<endl;*/
if(i*j!=36&&num==i*j-i*j/4){
ans[i%4][j%4]=p;//goto End;
}else if(i*j==36&&num==i*j-i*j/4+1){
ans[i%4][j%4]=p;//goto End;
}
}
End:;
/*cout<<i<<" "<<j<<" : "<<endl;
for(int x=1;x<=i;++x){
for(int y=1;y<=j;++y){
cout<<a[ans[i%4][j%4]][x>4?x-4:x][y>4?y-4:y];
}
cout<<endl;
}
cout<<endl;*/
}
}
}
int main() {
//freopen("1.in","r",stdin);
Init();
int T;scanf("%d",&T);
while(T--){
cin>>n>>m;
if(n>3&&m>3){
if(n%2==2&&m%2==2)printf("%d\n",n*m-n*m/4+1);
else printf("%d\n",n*m-n*m/4);
for(int x=1;x<=n;++x){
for(int y=1;y<=m;++y){
printf("%d",a[ans[n%4][m%4]][x%4?x%4:4][y%4?y%4:4]);
}
puts("");
}
}else{
if(n<=3&&m<=3){
printf("%d\n",n*m);
for(int x=1;x<=n;++x){
for(int y=1;y<=m;++y){
printf("1");
}
puts("");
}
}else{
if(n<m){
if(n==3&&m%4==3)printf("%d\n",n*m-n*m/4+1);
else printf("%d\n",n*m-n*m/4);
for(int x=1;x<=n;++x){
for(int y=1;y<=m;++y){
printf("%d",b[x][y%4?y%4:4]);
}
puts("");
}
}else{
if(m==3&&n%4==3)printf("%d\n",n*m-n*m/4+1);
else printf("%d\n",n*m-n*m/4);
for(int x=1;x<=n;++x){
for(int y=1;y<=m;++y){
printf("%d",b[y][x%4?x%4:4]);
}
puts("");
}
}
}
}
}
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3768kb
input:
3 2 2 3 4 3 8
output:
4 11 11 9 1110 1011 1110 18 11101110 10111011 11101110
result:
ok ok (3 test cases)
Test #2:
score: -100
Wrong Answer
time: 5ms
memory: 3628kb
input:
361 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3 10 3 11 3 12 3 13 3 14 3 15 3 16 3 17 3 18 3 19 3 20 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 5 1...
output:
4 11 11 6 111 111 6 1110 1011 8 11101 10111 9 111011 101110 11 1110111 1011101 12 11101110 10111011 14 111011101 101110111 15 1110111011 1011101110 17 11101110111 10111011101 18 111011101110 101110111011 20 1110111011101 1011101110111 21 11101110111011 10111011101110 23 111011101110111 1011101110111...
result:
wrong answer There are 28 1s in you output, but you answered 27 (test case 81)