首页 > 其他分享 >Codeforces Round #715 (Div. 1) A

Codeforces Round #715 (Div. 1) A

时间:2022-11-09 01:22:26浏览次数:41  
标签:string cnt6 int 715 Codeforces ++ cnt5 && Div

A. Binary Literature

我们观察发现 就是找两个串要是最长公共子序列大于等于n的
我们就一定可以构造出一个出来
但是传统的最长公共子序列是n2的
我们考虑一些特殊的性质 我们发现他只是一个01串
01串的匹配可以说是非常大
三个01串 一定可以找到两个的0或者1 有大于等于n个的0或者1
所以我们直接找到这么两个串 考虑构造
我们直接双指针指向两个串 找到可以重叠的0或1 然后只输出一个0或者1就可以了
但是细节比较多
比如我们要最后没找到了一定要及时break 要是break了 我们肯定会有一些串没有跑完 我们还是要加在后面的 还有就是要是长度不够再后面及时加一些数
代码较长主要是不想写函数

void solve(){
    int n;cin>>n;
    string s1,s2,s3;cin>>s1>>s2>>s3;
    int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0,cnt6=0;
    for(auto i:s1)(i=='1')?cnt1++:cnt2++;
    for(auto i:s2)(i=='1')?cnt3++:cnt4++;
    for(auto i:s3)(i=='1')?cnt5++:cnt6++;
    if(cnt1>=n&&cnt3>=n){
        string s;
        //1
        int i,j;
        for(i=0,j=0;i<n<<1&&j<n<<1;){
            while(s1[i]!='1'&&i<n<<1){
                s.push_back(s1[i]);
                i++;
            }
            while(s2[j]!='1'&&j<n<<1){
                s.push_back(s2[j]);
                j++;
            }
            if(i==n<<1||j==n<<1)break;
            s.push_back('1');
            i++,j++;
        }
        while(i<n<<1){s.push_back(s1[i]),i++;}
        while(j<n<<1){s.push_back(s2[j]),j++;}
        while(s.size()<n*3)s.push_back('1');
        cout<<s<<endl;
    }else if(cnt1>=n&&cnt5>=n){
        string s;
        //1
        int i,j;
        for(i=0,j=0;i<n<<1&&j<n<<1;){
            while(s1[i]!='1'&&i<n<<1){
                s.push_back(s1[i]);
                i++;
            }
            while(s3[j]!='1'&&j<n<<1){
                s.push_back(s3[j]);
                j++;
            }
            if(i==n<<1||j==n<<1)break;
            s.push_back('1');
            i++,j++;
        }
        while(i<n<<1){s.push_back(s1[i]),i++;}
        while(j<n<<1){s.push_back(s3[j]),j++;}
        while(s.size()<n*3)s.push_back('1');
        cout<<s<<endl;
    }else if(cnt3>=n&&cnt5>=n){
        string s;
        //1
        int i,j;
        for(i=0,j=0;i<n<<1&&j<n<<1;){
            while(s2[i]!='1'&&i<n<<1){
                s.push_back(s2[i]);
                i++;
            }
            while(s3[j]!='1'&&j<n<<1){
                s.push_back(s3[j]);
                j++;
            }
            if(i==n<<1||j==n<<1)break;
            s.push_back('1');
            i++,j++;
        }
        while(i<n<<1){s.push_back(s2[i]),i++;}
        while(j<n<<1){s.push_back(s3[j]),j++;}
        while(s.size()<n*3)s.push_back('0');
        cout<<s<<endl;
    }else if(cnt2>=n&&cnt4>=n){
        string s;
        //1
        int i,j;
        for(i=0,j=0;i<n<<1&&j<n<<1;){
            while(s1[i]!='0'&&i<n<<1){
                s.push_back(s1[i]);
                i++;
            }
            while(s2[j]!='0'&&j<n<<1){
                s.push_back(s2[j]);
                j++;
            }
            if(i==n<<1||j==n<<1)break;
            s.push_back('0');
            i++,j++;
        }
        while(i<n<<1){s.push_back(s1[i]),i++;}
        while(j<n<<1){s.push_back(s2[j]),j++;}
        while(s.size()<n*3)s.push_back('0');
        cout<<s<<endl;
    }else if(cnt2>=n&&cnt6>=n){
        string s;
        //1
        int i,j;
        for(i=0,j=0;i<n<<1&&j<n<<1;){
            while(s1[i]!='0'&&i<n<<1){
                s.push_back(s1[i]);
                i++;
            }
            while(s3[j]!='0'&&j<n<<1){
                s.push_back(s3[j]);
                j++;
            }
            if(i==n<<1||j==n<<1)break;
            s.push_back('0');
            i++,j++;
        }
        while(i<n<<1){s.push_back(s1[i]),i++;}
        while(j<n<<1){s.push_back(s3[j]),j++;}
        while(s.size()<n*3)s.push_back('0');
        cout<<s<<endl;
    }else if(cnt4>=n&&cnt6>=n){
        string s;
        //1
        int i,j;
        for(i=0,j=0;i<n<<1&&j<n<<1;){
            while(s2[i]!='0'&&i<n<<1){
                s.push_back(s2[i]);
                i++;
            }
            while(s3[j]!='0'&&j<n<<1){
                s.push_back(s3[j]);
                j++;
            }
            if(i==n<<1||j==n<<1)break;
            s.push_back('0');
            i++,j++;
        }
        while(i<n<<1){s.push_back(s2[i]),i++;}
        while(j<n<<1){s.push_back(s3[j]),j++;}
        while(s.size()<n*3)s.push_back('0');
        cout<<s<<endl;
    }
}

标签:string,cnt6,int,715,Codeforces,++,cnt5,&&,Div
From: https://www.cnblogs.com/ycllz/p/16871844.html

相关文章

  • JavaScript实现滚动条滚动给div加颜色
    实现原理当滚动的距离大于某一个元素到页面顶部的距离时候,给元素设置实现步骤1.获取某一个元素到页面顶部的距离2.如果距离大于零则给div加上颜色,如果等于0,即归位的时......
  • 为什么我们必须使用div?
    那么,为什么我们必须使用div?如果您查看Mozilla的html5元素列表,则每个元素都有语义,然后我们进入<div>并显示:“表示没有特殊含义的通用容器。......
  • codeforces 1750_D
    https://codeforces.com/contest/1750/problem/D#include<iostream>#include<vector>#include<cmath>#include<map>#include<unordered_map>#include<unordered_set>......
  • Codeforces试题乱做 Part9
    他挥毫泼墨落笔她舞袖梦里佳期戏中情戏中意陌路人相逢在花天锦地\(\text{[CF1736E]SwapandTake}\)\(\color{green}{\text{[EASY]}}\)我们考虑最终最优的答案中......
  • vue.js3:div上添加右键菜单([email protected])
    一,js代码:<template><div><divstyle="width:800px;margin:auto;display:flex;flex-direction:column;"><div>请选择上传图片:<inputtype="......
  • CF1743 Codeforces Round #832 (Div. 2)
    A.TwoGroups签到题,把正负数分开放再相减即可.赛后从大佬们那得知也可以直接加的,最后取个abs.膜拜大佬!B.BANBAN构造.显然每次交换最多可以破坏前面一个BAN,破坏后面......
  • Sadegh Aliakbarian-2021-ContextuallyPlausibleDiverse3DHumanMotionPrediction-ICCV
    #ContextuallyPlausibleandDiverse3DHumanMotionPrediction#paper1.paper-info1.1MetadataAuthor::[[SadeghAliakbarian]],[[FatemehSaleh]],[[Lars......
  • CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) A-D
    比赛链接A题解知识点:贪心。注意到\(a[1]\neq1\),\(1\)永远不可能换到前面;\(a[1]=1\)可以交换后面任意元素。时间复杂度\(O(n)\)空间复杂度\(O(n)\)代码#......
  • Solution Set -「Public NOIP Round #3 (Div. 1)」
    \(\mathscr{A}\sim\)移除石子  Tags:「A.构造」「C.细节」  "显然"直接按\((x,y)\)二元组排序后两两组成正方形!喜提\(90\text{pt}\).  实际上.还有一些......
  • CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!)
    我要死给普,给我死给普A记得好像开场不会来着。就只要判断\(a_1\)是否为\(1\)就行了。正确性显然。B分讨两种情况,一种是所有的01都算上,另一种是取全0或全1段,......