Codeforces Round #545 (Div. 2) D 贪心 + kmp
https://codeforces.com/contest/1138/problem/D
题意
两个01串s和t,s中字符能相互交换,问最多能得到多少个(可交叉)的t
题解
- 即将s中的01塞进t中,预处理出next(tlen),然后每次填完移到next(tlen)继续填即可
代码
#include<bits/stdc++.h>
using namespace std;
int sl,pl,i,j,a,b,e,f,nt[500005];
string s,p;
void get_nt(){
int plen=p.size(),j=0,k=-1;
nt[0]=-1;
while(j<plen){
if(k==-1||p[k]==p[j]){
k++;j++;
nt[j]=k;
}else k=nt[k];
}
}
int main(){
cin>>s>>p;
sl=s.size();pl=p.size();
get_nt();
for(i=0;i<pl;i++){
if(p[i]=='0')a++;
else b++;
}
for(i=0;i<sl;i++){
if(s[i]=='0')e++;
else f++;
}
if(e>=a&&f>=b){
e-=a;f-=b;
for(i=0;i<pl;i++)s[i]=p[i];
j=nt[pl];
}else{
cout<<s<<endl;
return 0;
}
while(1){
if(!e||!f){
if(e){
for(j=0;j<e;j++)s[i++]='0';
break;
}else{
for(j=0;j<f;j++)s[i++]='1';
break;
}
}
if(p[j]=='0'){
s[i++]='0';
j++;
e--;
}else{
s[i++]='1';
j++;
f--;
}
if(j==pl)j=nt[j];
}
cout<<s<<endl;
}
Codeforces Round #545 (Div. 2) D 贪心 + kmp的更多相关文章
- Codeforces Round #545 (Div. 2)D(KMP,最长公共前后缀,贪心)
#include<bits/stdc++.h>using namespace std;const int N=1000007;char s1[N],s2[N];int len1,len2; ...
- Codeforces Round #545 (Div. 1) 简要题解
这里没有翻译 Codeforces Round #545 (Div. 1) T1 对于每行每列分别离散化,求出大于这个位置的数字的个数即可. # include <bits/stdc++.h&g ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- Codeforces Round #545 (Div. 2) C. Skyscrapers 离散化+贪心
题目链接 给你一个n∗m的矩阵res,让你输出一个n∗m的矩阵a,这个矩阵满足:给你一个n*m的矩阵res,让你输出一个n*m的矩阵a,这个矩阵满足:给你一个n∗m的矩阵res,让你输出一个n∗m的矩 ...
- Codeforces Round #545 (Div. 1) Solution
人生第一场Div. 1 结果因为想D想太久不晓得Floyd判环法.C不会拆点.E想了个奇奇怪怪的set+堆+一堆乱七八糟的标记的贼难写的做法滚粗了qwq靠手速上分qwqqq A. Skyscraper ...
- Codeforces Round #545 Div. 1自闭记
A:求出该行该列各有多少个比其小的取max,该行该列各有多少个比其大的取max,加起来即可. #include<iostream> #include<cstdio> #incl ...
- Codeforces Round #547 (Div. 3) F 贪心 + 离散化
https://codeforces.com/contest/1141/problem/F2 题意 一个大小为n的数组a[],问最多有多少个不相交的区间和相等 题解 离散化用值来做,贪心选择较前的区间 ...
- Codeforces Round #545 (Div. 1)
本来开头两道题写得挺快的,然后第三题想了一会儿胡出一个scc计算gcd的做法,写了一发凭借信仰交了上去结果一发pp了?然后第四题沙雕了想了很久才会,于是罚时瞬间变多.结果后面两题都没时间看了,赛后感觉 ...
- Codeforces Round #545 (Div. 2) 题解
题目链接 A. Sushi for Two 题意 在一个 01 序列中找出长为偶数的连续的一段使得它前一半和后一半内部分别相同,而前一半和后一半不同. \(2\le n\le 100\ 000\) 题 ...
随机推荐
- Loadrunner Vugen参数列表中数据分配方法及更新值的时间9种组合说明及验证
作为刚开始学习Loadrunner的新人,Data Assignment Method以及Update Method在相互组合之后,LR如何进行取值让我很是头疼. 于是花了一个晚上的时间认真学习官方文 ...
- cron表达式学习
一.Cron 是计划任务(定时任务) 二.Cron表达式 Cron表达式是一个字符串,分为6或7个域,每个域用空格分开.Cron有如下两种语法格式: (1) Seconds Minutes Hours ...
- Unity3D人脸建模 AvataSDK研究
1.Unity与windows交互 调用文件浏览器 1.用C#调用comdlg32.dll , 利用GetOpenFileName实现打开文件对话框 <1> 整体参考https://w ...
- PS 知识整理
Ctrl+J键复制背景图层. ps怎样只让截取的一部分图旋转 https://jingyan.baidu.com/article/d45ad14877fc6e69542b8079.html 按Ctrl ...
- linux下nginx日常操作
一.检查配置文件语法 [root@node2 /]# nginx -tc /usr/local/nginx/conf/nginx.conf nginx: the configuration file ...
- Python设计模式 - UML - 组合结构图(Composite Structure Diagram)
简介 组合结构图用来显示组合结构或部分系统的内部构造,包括类.接口.包.组件.端口和连接器等元素,是UML2.0的新增图. 组合结构图侧重复合元素的方式展示系统内部结构,包括与其他系统的交互接口和通信 ...
- js 中格式化显示时间
function getMyDateTime(str){ var oDate = new Date(str), oYear = oDate.getFullYear(), oMonth = oDate. ...
- MySQL索引原理以及查询优化
转载自:https://www.cnblogs.com/bypp/p/7755307.html MySQL索引原理以及查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且 ...
- IDEA cannot resolve symbol “xxxx”
有缓存 多试两次就可以了. 技术交流群:816227112
- WPF打印京东电子面单(可以异步)
参考:https://www.cnblogs.com/guogangj/archive/2013/02/27/2934733.html 模板:JDFlowDocument.xaml <FlowD ...