F

爱音的01串构造

http://Fhttps://ac.nowcoder.com/acm/contest/120564/F

有题意得,1得到0,0得到1,01得到2,因此要想值最大,就必须多01字段,当a=b时,只要输出a次01或10即可,而不同时,需要分类讨论,当a>b的时候,这是就用1来分隔0,把0分割成b+1块,每块长度a/(b+1),若有余数k,就将前k块分别多加入1个0,每块之间放入1。而b>a时,同理可得。

#include<bits/stdc++.h>
using namespace std;
int main() {
    int T;
    cin>>T;
    while(T--){
        int a,b;
        cin>>a>>b;
        string s;
        if(a==0){
        s=string(b,'1');
        }
        else if(b==0){
        s=string(a,'0');
        }
        else if(a==b){
        for(int i=0;i<a;i++){
             s+="10";
          }
        }
        else if(a>b){
            int x=a/(b+1);
            int k=a%(b+1);
            for (int i=1;i<=b+1;i++){
                if (k>0){
                s+=string(x+1,'0');
                k--;
                }
                else{
               s+=string(x,'0');
               }
                if(i<= b){
                    s+='1';
                }
            }
        }
        else{
            int x=b/(a+1);
            int k=b%(a+1);
            for (int i=1;i<=a+1;i++){
                if (k>0){
                s+=string(x+1,'1');
                k--;
                }
                else{
               s+=string(x,'1');
               }
                if(i<=a){
                    s+='0';
                }
            }
        }
        cout<<s<<'\n';
    }
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务