QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#735408#9114. Black or White 2ucup-team134#WA 0ms3764kbC++172.2kb2024-11-11 19:45:492024-11-11 19:45:51

Judging History

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

  • [2024-11-11 19:45:51]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3764kb
  • [2024-11-11 19:45:49]
  • 提交

answer

#include <bits/stdc++.h>

#define ll long long
#define pb push_back
#define f first
#define s second
#define sz(x) (int)(x).size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define ios ios_base::sync_with_stdio(false);cin.tie(NULL)
#define ld long double
#define li __int128

using namespace std;

mt19937 rng(time(NULL));

void test(int n,int m,int k){
	vector<pair<int,int>> sq;
	vector<int> s;
	for(int i=0;i<n;i++){
		sq.pb({i,0});
		s.pb(min(i+1,m));
	}
	for(int j=1;j<m;j++){
		sq.pb({n-1,j});
		s.pb(min(m-j,n));
	}
	vector<vector<int>> ans(n,vector<int>(m));
	auto fil=[&](int i,int k){
		int x=sq[i].f,y=sq[i].s;
		while(x>=0&&y<m){
			ans[x][y]=k;
			x--;
			y++;
		}
	};
	int treba=k;
	bool sw=0;
	if(treba>(n*m)/2){
		treba=n*m-k;
		sw=1;
	}
	int my=0;
	vector<bool> uzet(sz(s));
	for(int i=0;my<treba;i++){
		uzet[i]=1;
		my+=s[i];
		if(my>treba){
			my-=s[i];
			uzet[i]=0;
		}
	}
	for(int i=sz(s)-1;my<treba;i--){
		uzet[i]=1;
		my+=s[i];
	}
	int cnt=0;
	while(my!=treba){
		for(int i=0;my>treba;i++){
			if(uzet[i]&&uzet[i+1]&&uzet[i+2]){
				uzet[i]=0;
				my-=s[i];
			}
			else{
				break;
			}
		}
		for(int i=0;my<treba;i++){
			if(!uzet[i]&&!uzet[i+1]&&!uzet[i+2]){
				uzet[i]=1;
				my+=s[i];
			}
			else{
				break;
			}
		}
		
		for(int i=sz(s)-1;my>treba;i--){
			if(uzet[i]&&uzet[i-1]&&uzet[i-2]){
				uzet[i]=0;
				my-=s[i];
			}
			else{
				break;
			}
		}
		for(int i=sz(s)-1;my<treba;i--){
			if(!uzet[i]&&!uzet[i-1]&&!uzet[i-2]){
				uzet[i]=1;
				my+=s[i];
			}
			else{
				break;
			}
		}
		cnt++;
		if(cnt>5){
			printf("%i %i %i\n",n,m,k);
			break;
		}
	}
	if(sw){
		for(int i=0;i<sz(s);i++){
			uzet[i]=!uzet[i];
		}
	}
	for(int i=0;i<sz(s);i++){
		fil(i,uzet[i]);
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			printf("%i ",ans[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	/*for(int n=2;n<=100;n++){
		printf("%i!\n",n);
		for(int m=2;m<=100;m++){
			for(int k=0;k<=n*m;k++){
				test(n,m,k);
			}
		}
	}
	return 0;*/
	ios;
	int t;
	cin >> t;
	while(t--){
		int n,m,k;
		cin >> n >> m >> k;
		test(n,m,k);
	}
	return 0;
}

详细

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3764kb

input:

2
2 2 2
2 3 0

output:

1 0 
0 1 
0 0 0 
0 0 0 

result:

wrong answer