题解:P12556 嘟嘟嘟
wukaichen888 · · 题解
可能有帮助:蒋凌宇抽屉原理构造。
对于
对于
假如按照循环节为
仍然按照循环节为
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=505;
ll n,m,c,q;
ll a[N][N];
ll c0,c1,cnt[10];
char s[N];
int main(){
mt19937 rnd;srand(time(0));rnd.seed(rand());
scanf("%lld%lld%lld%lld",&n,&m,&c,&q);
for(ll i=1;i<=n;i++){
scanf("%s",s+1);
for(ll j=1;j<=m;j++)
if(s[j]=='R') a[i][j]=0;
else if(s[j]=='G') a[i][j]=1;
else if(s[j]=='B') a[i][j]=2;
}
if(c==2){
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++){
c0+=(a[i][j]!=((i+j)&1ll));
c1+=(a[i][j]!=((i+j+1ll)&1ll));
}
if(c0<=q){for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) a[i][j]=((i+j)&1ll);}
else if(c1<=q){for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) a[i][j]=((i+j+1ll)&1ll);}
}
else{
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
if((i+j)&1ll){
cnt[0]++,cnt[1]++,cnt[2]++;
cnt[a[i][j]]--;
}
else cnt[a[i][j]]++;
for(ll p=0;p<3;p++)
if(cnt[p]<=q){
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
if((i+j)&1ll) a[i][j]=p;
else if(a[i][j]==p) a[i][j]=(a[i][j]+1)%3;
break;
}
}
for(ll i=1;i<=n;i++){
for(ll j=1;j<=m;j++)
if(a[i][j]==0) printf("R");
else if(a[i][j]==1) printf("G");
else printf("B");
puts("");
}
return 0;
}