题目链接:http://codeforces.com/contest/1138/problem/D

题目大意:给你两个字符串s1和s2(只包含0和1),对于s1中,你可以调换任意两个字符的位置。问你最多能在s1中构造出几个s2(可重叠)。

具体思路:首先找到字符串s2的最小循环节,比如说1101,我们找到的最小循环节就是101,这样的话,我们每次在后面加上101就能构造出一个新的1101了,最小循环节是最小的代价。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
const int maxn = 6e5+;
char str1[maxn],str2[maxn];
char str[maxn];
int nex[maxn];
void getnex(int len){
nex[]=-;
int i=,j=-;
while(i<len){
if(j==-||str2[i]==str2[j]){
i++;
j++;
nex[i]=j;
}
else {
j=nex[j];
}
}
}
int main(){
scanf("%s %s",str1,str2);
int len1=strlen(str1);
int len2=strlen(str2);
getnex(len2);
int len=;
int tmp=len2-nex[len2];
for(int i=len2-tmp;i<=len2-;i++){
str[len++]=str2[i];
}
//cout<<str<<endl;
int s0=,s1=;
for(int i=;i<len1;i++){
if(str1[i]=='')s1++;
if(str1[i]=='')s0++;
}
int t0=,t1=;
for(int i=;i<len2;i++){
if(str2[i]=='')t1++;
if(str2[i]=='')t0++;
}
if(s0<t0||s1<t1){
printf("%s\n",str1);
return ;
}
t0=,t1=;
for(int i=;i<len;i++){
if(str[i]=='')t1++;
if(str[i]=='')t0++;
}
for(int i=;i<len2-tmp;i++){
printf("%c",str2[i]);
if(str2[i]=='')s1--;
else s0--;
}
while(s0>=t0&&s1>=t1){
s0-=t0;
s1-=t1;
printf("%s",str);
}
while(s0>)printf(""),s0--;
while(s1>)printf(""),s1--;
printf("\n");
}

Codeforces Round #545 (Div. 2)(D. Camp Schedule)的更多相关文章

  1. Codeforces Round #344 (Div. 2)(按位或运算)

    Blake is a CEO of a large company called "Blake Technologies". He loves his company very m ...

  2. D2. Kirk and a Binary String (hard version) D1 Kirk and a Binary String (easy version) Codeforces Round #581 (Div. 2) (实现,构造)

    D2. Kirk and a Binary String (hard version) time limit per test1 second memory limit per test256 meg ...

  3. Codeforces Round #268 (Div. 2) (被屠记)

    c被fst了................ 然后掉到600+.... 然后...估计得绿名了.. sad A.I Wanna Be the Guy 题意:让你判断1-n个数哪个数没有出现.. sb题 ...

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

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

  5. Codeforces Round #524 (Div. 2)(前三题题解)

    这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...

  6. Codeforces Round #624 (Div. 3)(题解)

    Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...

  7. Codeforces Round #253 (Div. 1) (A, B, C)

    Codeforces Round #253 (Div. 1) 题目链接 A:给定一些牌,然后如今要提示一些牌的信息,要求提示最少,使得全部牌能够被分辨出来. 思路:一共2^10种情况,直接暴力枚举,然 ...

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

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

  9. Codeforces Round #545 (Div. 1)

    本来开头两道题写得挺快的,然后第三题想了一会儿胡出一个scc计算gcd的做法,写了一发凭借信仰交了上去结果一发pp了?然后第四题沙雕了想了很久才会,于是罚时瞬间变多.结果后面两题都没时间看了,赛后感觉 ...

随机推荐

  1. mybatis的一些小知识

    <update id="setReaded"> update wa_ent_job_app set IS_READ= 1, READ_TIME=now() where ...

  2. Python基础语法总结

    1.Python标识符 在 Python 里,标识符有字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大 ...

  3. 开源的电商 B2C、B2B2C 电商系统-关于shopnc版权问题处处是陷阱啊

    最近有好多人收到过shopnc的律师函,关于这可能大部分人都是在淘宝购买的,或者直接在33hao购买的.很多人可能没注意版权的问题,以为在33hao购买就没问题,但这只是陷阱,大家一定要注意 来源:h ...

  4. mysql 5.7 启动脚本

    最近这段时间,在看mysql,安装了,也应用过,对于生产环境中,一般都选择使用source code安装,在安装的时候可以自定义相关路径和内容,对于生产环境来说更有效.相对于mysql 5.5的安装, ...

  5. 使用PreparedStatement 查询一条数据 封装成一个学生的Student1对象

    package cn.lijun.entity; public class Student1 { private int id; private String sname; private int g ...

  6. C# 实现身份验证之WCF篇(2)

    前面总结了三种方法,今天又将分享三种方法,完成WCF篇. 第四种:SOAP Header验证 首先定义一个WCF服务契约及服务实现类(后面的各种验证均采用该WCF服务),我这里直接采用默认的代码,如下 ...

  7. Ajax结合Json进行交互数据(四)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. ACM-ICPC 2018 焦作赛区网络预赛 K Transport Ship (多重背包)

    https://nanti.jisuanke.com/t/31720 题意 t组样例,n种船只,q个询问,接下来n行给你每种船只的信息:v[i]表示这个船只的载重,c[i]表示这种船只有2^(c[i] ...

  9. uva11916 Emoogle Grid (BSGS)

    https://uva.onlinejudge.org/external/119/p11916.pdf 令m表示不能染色的格子的最大行号 设>m行时可以染k种颜色的格子数有ck个,恰好有m行时可 ...

  10. HDU 6400(括号组合 ~)

    题意是说在 h 行 w 列的矩阵中,通过设计使得尽可能多的行或列能满足题中的平衡条件. 如果行数(列数)是奇数,那么每一列(行)一定不能平衡,就要按照满足每一行(列)平衡,输出“ () “:若行数和列 ...