#include<bits/stdc++.h>
using namespace std;
const int N=1000007;
char s1[N],s2[N];
int len1,len2;
int nex[N];
int cnt1[7],cnt2[7];
int main(){
    scanf("%s %s",s1+1,s2+1);
    len1=strlen(s1+1);
    len2=strlen(s2+1);
    for(int i=1;i<=len1;i++)
        cnt1[s1[i]-'0']++;
    for(int i=1;i<=len2;i++)
        cnt2[s2[i]-'0']++;
    if(cnt1[1]>=cnt2[1]&&cnt1[0]>=cnt2[0]){//如果个数足够先输出s2
     for(int i=1;i<=len2;i++)
            putchar(s2[i]);
     cnt1[0]-=cnt2[0];
     cnt1[1]-=cnt2[1];
    }
    for(int i=2,j=0;i<=len2;i++){//kmp寻找最长公共前后缀
        while(s2[i]!=s2[j+1]&&j)//这一位不相等就把模式串返回到标记
            j=nex[j];
        if(s2[i]==s2[j+1])//相等就让模式串位置前进,模式串可能为空此时不需要使模式串标记前进,因为模式串里面没有能和主串相等的字符
            j++;
        nex[i]=j;//记录标记,以便以后返回
    }
    while(cnt1[1]&&cnt1[0]){
     int flag=0;
     for(int i=nex[len2]+1;i<=len2;i++){//贪心地从最长公共前后缀的下一位开始输出
      if(cnt1[s2[i]-'0']){
       putchar(s2[i]);
       cnt1[s2[i]-'0']--;
      }
      else{
       flag=1;
                break;
      }
     }
     if(flag)
            break;
    }
    for(int i=1;i<=cnt1[0];i++)//输出剩余的0或1
        putchar('0');
    for(int i=1;i<=cnt1[1];i++)//输出剩余的0或1
        putchar('1');
}

Codeforces Round #545 (Div. 2)D(KMP,最长公共前后缀,贪心)的更多相关文章

  1. Codeforces Round #545 (Div. 1) 简要题解

    这里没有翻译 Codeforces Round #545 (Div. 1) T1 对于每行每列分别离散化,求出大于这个位置的数字的个数即可. # include <bits/stdc++.h&g ...

  2. HDU 2594(求最长公共前后缀 kmp)

    题意是在所给的两个字符串中找最长的公共前后缀,即第一个字符串前缀和第二个字符串后缀的最长相等串. 思路是将两个字符串拼接在一起,然后直接套用 kmp 算法即可. 要注意用 next 会报编译错误,改成 ...

  3. 【kmp+求所有公共前后缀长度】poj 2752 Seek the Name, Seek the Fame

    http://poj.org/problem?id=2752 [题意] 给定一个字符串,求这个字符串的所有公共前后缀的长度,按从小到达输出 [思路] 利用kmp的next数组,最后加上这个字符串本身 ...

  4. Codeforces Round #545 (Div. 2) D 贪心 + kmp

    https://codeforces.com/contest/1138/problem/D 题意 两个01串s和t,s中字符能相互交换,问最多能得到多少个(可交叉)的t 题解 即将s中的01塞进t中, ...

  5. Codeforces Round #545 (Div. 1) Solution

    人生第一场Div. 1 结果因为想D想太久不晓得Floyd判环法.C不会拆点.E想了个奇奇怪怪的set+堆+一堆乱七八糟的标记的贼难写的做法滚粗了qwq靠手速上分qwqqq A. Skyscraper ...

  6. Codeforces Round #545 (Div. 2)-Camp Schedule

    题目要求,给定一个s序列,一个p序列,问能不能对s做相应的调整,使得s序列中,有尽可能多的p子串(可以重复) 最开始我拿到这个题目,也是一点头绪都没有,如何做调整呢? 首先考虑如何会有尽可能多的子串, ...

  7. CodeForces Round #545 Div.2

    A. Sushi for Two 代码: #include <bits/stdc++.h> using namespace std; ; ; int a[maxn], vis[maxn]; ...

  8. Codeforces Round #545 Div. 1自闭记

    A:求出该行该列各有多少个比其小的取max,该行该列各有多少个比其大的取max,加起来即可. #include<iostream> #include<cstdio> #incl ...

  9. Codeforces Round #545 (Div. 2) D

    链接:http://codeforces.com/contest/1138/problem/D 啊啊啊啊啊啊,自闭啊,比赛的时候判断条件 if(s1[i-1]=='0') aa++;写成了 if(s1 ...

随机推荐

  1. python学习(十六) 测试

    测试驱动开发. 16.1 先测试,后编码 16.1.1 精确的需求说明 16.1.2 为改变而计划 16.1.3 测试的4个步骤 16.2 测试工具 16.2.1 doctest 16.2.2 uni ...

  2. java成神之——jaxb操作xml的基本使用

    JAXB 依赖 读取xml配置 写配置 自定义写配置 结语 JAXB 依赖 <dependency> <groupId>javax.activation</groupId ...

  3. 并发模型(二)——Master-Worker模式

    Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务:Worker进程,负责处理子任务.当Worker进程将子任务处理完成后 ...

  4. leetcode12

    public class Solution { public string IntToRoman(int num) { string[] M = { "", "M&quo ...

  5. C++中的explicit关键字 - 抑制隐式转换(转)

    在C++程序中很少有人去使用 explicit 关键字,不可否认,在平时的实践中确实很少能用的上.再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决.但稍微留心一下就会发现现有的MFC库 ...

  6. Ant之build.xml详解---可用

    Ant的概念 :在Eclipse中使用Ant Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率. Ant和make命令很像. ...

  7. Jquery异步

    一.Jquery向aspx页面请求数据$("#Button1").bind("click", function () { $.ajax({ type: &quo ...

  8. 在web.Config文件中添加数据库连接配置

    新建一个网站,打开web.config文件,在connectionString配置节点添加add节点进行数据库进行数据库连接配置代码如下: <connectionStrings> < ...

  9. php 读取和下载execl

    最近用到php 对excel 的操作 下来 小弟为大家 先贴一下自己的代码  有什么补充的 大神们请指点下.感激不尽. 我用的是yii2   yii2中有类 phpexcel 先说说下载吧. 首先下载 ...

  10. validate 不校验的解决办法

    最近使用validate.js用于项目的表单校验,调了半天,怎么都不校验,仔细对照例子发现 例子中要校验的文本框除了ID外还有name属性,而我在做的时候没有name属性,到这里终于 看到了希望,把所 ...