QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#117369#6309. AqreaakennesWA 5ms3768kbC++142.5kb2023-07-01 02:34:482023-07-01 02:34:49

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-01 02:34:49]
  • 评测
  • 测评结果:WA
  • 用时:5ms
  • 内存:3768kb
  • [2023-07-01 02:34:48]
  • 提交

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)