QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#735408 | #9114. Black or White 2 | ucup-team134# | WA | 0ms | 3764kb | C++17 | 2.2kb | 2024-11-11 19:45:49 | 2024-11-11 19:45:51 |
Judging History
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