QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#535797 | #9114. Black or White 2 | synonym | RE | 0ms | 0kb | C++17 | 3.1kb | 2024-08-28 14:57:29 | 2024-08-28 14:57:31 |
answer
#include "bits/stdc++.h"
using namespace std;
#define int long long
#define all(x) begin(x), end(x)
#define sz(x) (int) (x).size()
const int mxn=2e3;
void check();
int n,m,k,fl,nm;
int g[mxn][mxn];
void solve2() {
if (k%2) {
for (int i=0; i<m; i++) {
if (k==0) break;
g[0][i] = 1; k--; if (k==0) break;
g[1][i] = 1; k--; if (k==0) break;
}
} else {
if (k==0) return;
g[0][m-1] = 1; k--;
for (int i=0; i<m; i++) {
if (k==0) break;
g[0][i] = 1; k--; if (k==0) break;
g[1][i] = 1; k--; if (k==0) break;
}
}
}
void solve3() {
if (k%3==0 && k) {
g[0][m-1] = 1; k--;
}
int ok = k;
for (int i=0; k; i++) {
if (!k) break;
if (ok%3==1) {
g[1][i] = 1; k--;
if (!k) break;
g[0][i] = 1; k--;
g[2][i] = 1; k--;
if (!k) break;
} else {
g[0][i] = 1; k--;
g[2][i] = 1; k--;
if (!k) break;
g[1][i] = 1; k--;
if (!k) break;
}
}
}
void solvek2() {
g[0][0] = g[n-1][m-1] = 1;
}
void solven() {
// swap(n,m); nm = !nm;
for (int i=0; i<=n; i++) {
for (int j=0; j<=m; j++) {
g[i][j] = 0;
}
}
int c = 0;
while (k >= 2*n) {
for (int i=0; i<n; i++) {
g[i][c] = 1; k--;
}
c++;
}
if (k >= n) {
for (int i=0; i<n; i+=2) {
g[i][c] = 1; k--;
}
}
if (2*k <= n) {
for (int i=0; k; i+=2) {
g[i][m-1] = 1; k--;
}
return;
}
int fff = 0;
if (k%3==2) {
fff = 1; k--;
}
int sp = 0;
if (k%3==1) {
g[0][m-1] = 1; sp=1; k--;
}
for (int i=sp; k; i++) {
g[i][m-1] = 1; k--;
if (!k) break;
if (i%2==sp%2) {
g[i][m-2] = 1; k--;
}
}
if (fff) {
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
if (g[i][j]) continue;
int su=0;
su += g[i+1][j+1]+g[i+1][j]+(j?g[i+1][j-1]:0);
su += g[i][j+1]+g[i][j+1]+(j?g[i][j-1]:0);
if (i) su += g[i-1][j+1]+g[i-1][j]+(j?g[i-1][j-1]:0);
if (!su) {
// cout<<i<<" "<<j<<" "<<su<<endl;
fff = 0;
g[i][j] = 1;
return;
}
}
}
}
}
void solve() {
cin>>n>>m>>k;
// cout<<n<<" "<<m<<" "<<k<<endl;
if (2*k > n*m) {
fl = 1;
k = n*m-k;
} else fl = 0;
if (n>m) {
nm = 1;
swap(n,m);
} else nm = 0;
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) g[i][j]=0;
}
if (n==3 && m==3 && k==4) {
g[0][0] = g[0][1] = g[0][2] = g[1][1] = 1;
} else {
if (n==2) {
solve2();
} else if (n==3) {
solve3();
} else if (k==2) {
solvek2();
} else {
solven();
}
}
if (fl) {
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
g[i][j] = 1-g[i][j];
}
}
}
check();
if (nm) {
for (int j=0; j<m; j++) {
for (int i=0; i<n; i++) {
cout<<g[i][j]<<"";
}
cout<<"\n";
}
} else {
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
cout<<g[i][j]<<"";
}
cout<<"\n";
}
}
cout<<"\n";
}
void check() {
for (int i=0; i<n-1; i++) {
for (int j=0; j<m-1; j++) {
if (g[i][j]+g[i][j+1]+g[i+1][j]+g[i+1][j+1]==2) {
assert(0);
}
}
}
}
signed main() {
ios::sync_with_stdio(false); cin.tie(nullptr);
int t; cin>>t;
for (int i=0; i<t; i++) {
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Runtime Error
input:
2 2 2 2 2 3 0