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\) 题 ...
随机推荐
- c# WinForm 文本输入对话框
这种功能为什么不向MessageBox一样自带,还得自己写~~ 代码: public InputBox(string label) { InitializeComponent(); label1.Te ...
- python的车牌号的检测
自己总结一下,从网上找到的关于车牌号的识别的一些博文.https://www.jianshu.com/p/fcfbd3131b84 https://www.cnblogs.com/do-hardwor ...
- python bmp转jpg 且灰度图转彩色
今天在简书,上看到了一个 bmp转jpg的代码,便记录一下. # coding:utf-8 import os from PIL import Image # bmp 转换为jpg,灰度图转RGB d ...
- CDH 安装 kafka
前言 其实cloudera已经做了这个事了,只是把kafka的包和cdh的parcel包分离了,只要我们把分离开的kafka的服务描述jar包和服务parcel包下载了,就可以实现完美集成了. 具体实 ...
- CHD 5.15 安装 Kylin
这里主要参考官网安装单机案例,并写入到脚本中.具体请看如下: 1.说明 这里采用的是root用户安装,但是运行时需要改一些配置,不然没有权限 2.安装 ...
- TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)
描述 The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located ...
- JVM深入理解
JVM深入理解 一.JVM介绍 JVM应用百度百科的原话是: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过 ...
- python3 经典排序方法
1.插入排序: def nsert_sort(list): for i in range(len(list)): for j in range(i): if list[i] < list[j]: ...
- Debian9安装后的一些配置
第一步 修改源 su root vi /etc/apt/sources.list #建议先备份,不过系统好像有已经备份好的 加入国内源,保存 apt-get update #更新源 ...
- HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价
Information Disturbing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/ ...