题目要求,给定一个s序列,一个p序列,问能不能对s做相应的调整,使得s序列中,有尽可能多的p子串(可以重复)

最开始我拿到这个题目,也是一点头绪都没有,如何做调整呢?

首先考虑如何会有尽可能多的子串,可以相交那种?

貌似我们要找的就是子串后缀和前缀匹配度

这里再次补充一下KMP中next数组的意义

首先要理解next数组的含义:https://www.cnblogs.com/chenxiwenruo/p/3546457.html

那么我们通过求next数组,很容易知道知道,t的最小循环长度是k=len_t-next[len_t]

但是最小循环长度是k,我们需要尽量多的构造这个最小循环,并且放在一起,余下的尽量按照最小循环进行往后匹配

当时补题的时候,我自己在想,我们已经把尽量多的最小循环个数的构造出来了,余下的是不是不用再安装最小循环进行

匹配呢?事实上是不行的,我们知道最小循环的意思是,把原本长度数组,可以用它的某个前缀进行循环表示。所以构造的字符,最后k个仍然只是前缀,如果匹配完的1,0仍然剩余,我们需要把1,0安装原来序列继续匹配,如果数量够的话,是会增加子串个数的。。。

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
const int maxx = +;
char s[maxx];
char t[maxx];
int net[maxx];
int len_s;
int len_t;
void get_next()
{
net[]=;
for (int i=,j=; i<=len_t; i++)
{
while(j> && t[i]!=t[j+])j=net[j];
if(t[i]==t[j+])j++;
net[i]=j;
}
}
int main()
{
int n,cnt_s,k,p,a,b,time;
while(~scanf("%s",+s))
{
scanf("%s",+t);
len_s=strlen(s+);
len_t=strlen(t+);
a=;
for (int i=; i<=len_s; i++)
{
a+=s[i]-'';
}
b=len_s-a;
len_t=strlen(t+);
get_next();
k=len_t-net[len_t];//最小循环节长度
cout<<k<<endl;
p=;
for (int i=; i<=k; i++)
{
p+=t[i]-'';
}
if(p==)
{
time=b;
}else if (p==k){
time=a;
}
else
{
time=min(a/p,b/(k-p));
}
for (int i=;i<=time;i++){
for (int j=;j<=k;j++){
printf("%c",t[j]);
}
}
a-=time*p,b-=time*(k-p);
int g=;
while(a||b){
if(b){
printf("");
b--;
}
if(a){
printf("");
a--;
}
}
printf("\n");
}
return ;
}

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

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

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

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

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

  3. CodeForces Round #545 Div.2

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

  4. Codeforces Round #545 (Div. 1)

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

  5. Codeforces Round #545 (Div. 2) 题解

    题目链接 A. Sushi for Two 题意 在一个 01 序列中找出长为偶数的连续的一段使得它前一半和后一半内部分别相同,而前一半和后一半不同. \(2\le n\le 100\ 000\) 题 ...

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

    题目链接:http://codeforces.com/contest/1138/problem/D 题目大意:给你两个字符串s1和s2(只包含0和1),对于s1中,你可以调换任意两个字符的位置.问你最 ...

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

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

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

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

  9. Codeforces Round #545 (Div. 2)(B. Circus)

    题目链接:http://codeforces.com/contest/1138/problem/B 题目大意:贼绕口的题目,就是给你两个字符串s1,s2,然后每一个人代表一列,第一列代表技能一每个人是 ...

随机推荐

  1. JAVA类的继承之多态特性

    父类可以接收子类的实例,方法的覆盖,属性的隐藏,这些都使我非常疑惑,今天有点时间记录之. 话不多说,直接上代码上结果 1. public class TestDto{ public static vo ...

  2. java中的伪泛型---泛型擦除(不需要手工强转类型,却可以调用强转类型的方法)

    Java集合如Map.Set.List等所有集合只能存放引用类型数据,它们都是存放引用类型数据的容器,不能存放如int.long.float.double等基础类型的数据. 使用反射可以破解泛型T类型 ...

  3. 在Linux(Centos7)上使用Docker运行.NetCore

    在上一篇中我们写了如何在windows中使用docker运行.netcore,既然我们了解了windows下的运行发布,我们也可以试试linux下使用docker运行.netcore项目,那么今天我们 ...

  4. SmartSql 常见问题

    常见问题 为什么不支持 Linq? SmartSql 希望 开发人员更多的接触 Sql ,获得绝对的控制权与安全感.所以目前没有计划支持 Code First 编程模式. 我想好了Sql怎么写,然后再 ...

  5. Javascript中双等号(==)隐性转换机制

    在Javascript中判断相等关系有双等号(==)和三等号(===)两种.其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否完全相等). 因此有几个常识知识: 1.对于strin ...

  6. MySQL 笔记整理(14) --count(*)这么慢,我该怎么办?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 14) --count(*)这么慢,我该怎么办? 有时你会发现,随着系统 ...

  7. ITSA(IT Strategy and Architecture)方法介绍

    Architecture Capability – At a Glance Architectural coherence part1 Architectural coherence part2 SA ...

  8. Docker 容器镜像删除

    1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: docker ...

  9. tomcat 控制台中文乱码问题

    1.找到${CATALINA_HOME}/conf/logging.properties2.添加语句:java.util.logging.ConsoleHandler.encoding = GBK 3 ...

  10. asp.net mvc前台显示带htm标签的解决办法(Razor —@Html.Raw())

    数据是从后台富文本编辑后丢在数据库后取出的,不加Html.Raw(),前台就会把Html标签一同显示