Codeforces Round #545 (Div. 2)-Camp Schedule
题目要求,给定一个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的更多相关文章
- Codeforces Round #545 (Div. 1) 简要题解
这里没有翻译 Codeforces Round #545 (Div. 1) T1 对于每行每列分别离散化,求出大于这个位置的数字的个数即可. # include <bits/stdc++.h&g ...
- Codeforces Round #545 (Div. 1) Solution
人生第一场Div. 1 结果因为想D想太久不晓得Floyd判环法.C不会拆点.E想了个奇奇怪怪的set+堆+一堆乱七八糟的标记的贼难写的做法滚粗了qwq靠手速上分qwqqq A. Skyscraper ...
- CodeForces Round #545 Div.2
A. Sushi for Two 代码: #include <bits/stdc++.h> using namespace std; ; ; int a[maxn], vis[maxn]; ...
- Codeforces Round #545 (Div. 1)
本来开头两道题写得挺快的,然后第三题想了一会儿胡出一个scc计算gcd的做法,写了一发凭借信仰交了上去结果一发pp了?然后第四题沙雕了想了很久才会,于是罚时瞬间变多.结果后面两题都没时间看了,赛后感觉 ...
- Codeforces Round #545 (Div. 2) 题解
题目链接 A. Sushi for Two 题意 在一个 01 序列中找出长为偶数的连续的一段使得它前一半和后一半内部分别相同,而前一半和后一半不同. \(2\le n\le 100\ 000\) 题 ...
- Codeforces Round #545 (Div. 2)(D. Camp Schedule)
题目链接:http://codeforces.com/contest/1138/problem/D 题目大意:给你两个字符串s1和s2(只包含0和1),对于s1中,你可以调换任意两个字符的位置.问你最 ...
- Codeforces Round #545 (Div. 2) D 贪心 + kmp
https://codeforces.com/contest/1138/problem/D 题意 两个01串s和t,s中字符能相互交换,问最多能得到多少个(可交叉)的t 题解 即将s中的01塞进t中, ...
- Codeforces Round #545 (Div. 2) D
链接:http://codeforces.com/contest/1138/problem/D 啊啊啊啊啊啊,自闭啊,比赛的时候判断条件 if(s1[i-1]=='0') aa++;写成了 if(s1 ...
- Codeforces Round #545 (Div. 2)(B. Circus)
题目链接:http://codeforces.com/contest/1138/problem/B 题目大意:贼绕口的题目,就是给你两个字符串s1,s2,然后每一个人代表一列,第一列代表技能一每个人是 ...
随机推荐
- Oracle AWR报告生成和性能分析
目录 一.AWE报告生成步骤 1.1 工具选择 1.2 自动创建快照 1.3 手工创建快照 1.4 生成AWR报告 二.AWR报告分析 2.1 AWR之DB Time 2.2 AWR之load_pro ...
- .NET Core微服务之服务间的调用方式(REST and RPC)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.REST or RPC ? 1.1 REST & RPC 微服务之间的接口调用通常包含两个部分,序列化和通信协议.常见的序列化 ...
- 《IDEO,设计改变一切》(Change By Design)- 读书笔记
一.关于IDEO与设计思维 IDEO是一家世界顶级创意公司,而作者蒂姆布朗是IDEO的CEO.当然,在未阅读本书之前,我都是不知道的,也不会主动去了解IDEO和蒂姆布朗的.那么,我为什么要去读这样一本 ...
- LogUtil【实现自由的控制日志的打印的封装类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于控制项目开发和上线阶段日志的打印. 效果图 暂不需要. 代码分析 在LogUtil类中声明代表不同日志级别的常量值(VERB ...
- 网站HTTP升级HTTPS完全配置手册
本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 今天,所有使用Google Chrome稳定版的用户迎来了v68正式 ...
- C#通过序列化实现深表复制
利用二进制序列化的方式进行深拷贝 有一个缺陷 序列化的类型必须标识为刻序列化的[Serializable] 否则无法进行二进制序列化 class Program { static void Main ...
- SQL Server 一列或多列重复数据的查询,删除(转载)
转载来源:https://www.cnblogs.com/sunxi/p/4572332.html 业务需求 最近给公司做一个小工具,把某个数据库(数据源)的数据导进另一个数据(目标数据库).要求导入 ...
- Java并发——synchronized关键字
前言: 只要涉及到Java并发那么我们就会考虑线程安全,实际上能够实现线程安全的方法很多,今天先介绍一下synchronized关键字,主要从使用,原理介绍 一.synchronized的使用方法 1 ...
- Spring Boot 整合 rabbitmq
一.消息中间件的应用场景 异步处理 场景:用户注册,信息写入数据库后,需要给用户发送注册成功的邮件,再发送注册成功的邮件. 1.同步调用:注册成功后,顺序执行发送邮件方法,发送短信方法,最后响应用户 ...
- WOW.js 使用教程
官网加动画特效,哇哦,下面我介绍一下WOW.js 官网地址:https://www.delac.io/wow/ 点击github可以找到wow.js和wow.min.js 以及animate.css者 ...