题意很明显不解释
做法就是直接模拟
有一个坑的地方就是中间值会爆ll WA50
1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(a) cerr<<#a<<"=="<<a<<endl 4 using namespace std; 5 typedef long long ll; 6 typedef pair<int,int> pii; 7 8 const int maxn=1e5+10; 9 10 int main() 11 { 12 int n,k,a[2]; 13 scanf("%d%d%d%d",&n,&k,&a[0],&a[1]); 14 int mn=min(a[0],a[1]); 15 int mx=max(a[0],a[1]); 16 debug((mn+1)*k),debug(mx); 17 if(1ll*(mn+1)*k<mx) //这里(mn+1)*k会爆ll 18 { 19 printf("NO\n"); 20 return 0; 21 } 22 char letter[2]= {‘G‘,‘B‘}; 23 string ans=""; 24 if(a[0]>a[1]) 25 { 26 letter[0]=‘B‘,letter[1]=‘G‘; 27 swap(a[0],a[1]); 28 } 29 int cnt=0; 30 for(int i=0; i<n; i++) 31 { 32 if(a[0]<=a[1] && cnt<k) 33 { 34 ans+=letter[1]; 35 a[1]--,cnt++; 36 } 37 else 38 { 39 ans+=letter[0]; 40 cnt=0,a[0]--; 41 } 42 } 43 cout<<ans.substr(0,n)<<endl; 44 return 0; 45 }/* 46 47 5 1 3 2 48 49 7 2 2 5 50 51 */
时间: 2024-10-25 19:05:25