Codeforces Round #386 (Div. 2) D

xiaoxiao2021-02-28  87

先插多的,再插少的;

关键在于先整体赋值这种思路

代码如下

#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int main() { int n,k,a,b,p; char aa='G',bb='B'; scanf("%d %d %d %d",&n,&k,&a,&b); if(b>a) { swap(a,b); swap(aa,bb); //保证a为多的; } char s[100005]; memset(s,0,sizeof(s)); for(int i=0;i<n;i++) s[i]=aa; for(int i=k;i<n;i+=(k+1)) { s[i]=bb; b--; if(b==0) { p=i; break; } } if(b==0&&(n-1-p<=k)) printf("%s\n",s); else if(b==0&&(n-1-p>k)) printf("NO\n"); else { for(int i=0;i<n;i++) { if((i==0&&s[1]==aa&&s[i]==aa)||(i==n-2&&s[n-1]==aa&&s[i]==aa)||(s[i-1]==aa&&s[i+1]==aa&&s[i]==aa)){ s[i]=bb; b--; } if(b==0) break; } if(b==0) printf("%s\n",s); else printf("NO\n"); } } 别人写的,更简单

#include<bits/stdc++.h> using namespace std; int main() { int N,K,a,b; char B = 'B',G = 'G'; scanf("%d %d %d %d",&N,&K,&a,&b); if(a > b) swap(a,b),swap(B,G); string st(N,B); for(int i = K ; i < N ; i += K + 1){ if(a == 0){ printf("NO\n"); return 0; } st[i] = G; a--; } for(int i = 0 ; i < N && a > 0 ; i++){ if(st[i] == G || (i > 0 && st[i - 1] == G) || (i + 1 < N && st[i + 1] == G)) continue; st[i] = G; a--; } cout << st; return 0; }

转载请注明原文地址: https://www.6miu.com/read-43641.html

最新回复(0)