B. Camp Schedule(KMPnext数组)

news2025/1/10 20:42:37

Problem - 1137B - Codeforces

在全国范围内广为人知的春季编程训练营即将开始。因此,所有友好的策展人和教师团队开始组成营地的时间表。经过不断的讨论,他们想出了一个时间表,可以表示为一个二进制字符串,其中第i个符号是 "1",如果学生将在第i天写比赛,"0",如果他们将有一天休息。

在最后时刻,Gleb说,如果夏令营按照时间表t(可以用与时间表s相同的格式来描述)运行,那么它将是最有成效的。由于当前的天数可能与时间表t中的天数不同,Gleb要求营地的时间表必须被改变,使t在其中作为子串出现的次数达到最大可能。同时,比赛日和休息日的数量不应改变,只是它们的顺序可以改变。

你能以最佳方式重新安排时间表吗?

输入
第一行包含字符串s (1⩽|s|⩽500000),表示营地日程表的当前项目。

第二行包含字符串t (1⩽|t|⩽500000),表示Gleb认为的最佳时间表。

字符串s和t只包含字符'0'和'1'。

输出
打印的计划表应该只包含字符'0'和'1',零的数量应该等于s中零的数量,一的数量应该等于s中一的数量。

如果有多个最佳时间表,则打印其中任何一个。

例子
inputCopy
101101
110
outputCopy
110110
输入副本
10010110
100011
输出拷贝
01100011
输入副本
10
11100
输出拷贝
01
注意
在第一个例子中,有两个出现,一个从第一位置开始,一个从第四位置开始。

在第二个例子中,只有一个从第三位开始的出现。注意,答案不是唯一的。例如,如果我们把第一天(即休息日)移到最后一个位置,t的出现次数不会改变。

在第三个例子中,甚至不可能出现一个。

题解:

贪心是写不了这道题的

假如子串是101这种

应该10101这样构造

我们每次应该找到其最大后缀与前缀相等的字符串的长度,其实就是ne数组

我们构建一个t串的ne数组,寻找一下最大前缀和后缀所匹配的地方,然后在这个地方后面的一个单位继续构造即可,因为都匹配了,所以上一个构造好的子串的后缀,就可以充当下一个需要构造的子串的前缀,这样构造的话,最后答案一定是最优解 

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
#include<cmath>
#include<stack>
#include<set>
using namespace std;
#define int long long
typedef pair<int,int> PII;
const int N = 1e6 + 10;
char a[N],b[N],ans[N];
int cnt[N];
int ne[N];
void solve()
{
	cin >> a >> b;
	int n = strlen(a);
	int m = strlen(b);
	for(int i = 0; i< n;i++)
	{
		cnt[a[i] - '0']++;
	}
	ne[0] = -1;
	int i = 0,j = -1;
	while(i < m)
	{
		if(j == -1||b[j] == b[i])
		{
			ne[++i] = ++j;
		}
		else
		j = ne[j];
	}
	for(int i = 0,j = 0;i < n;i++,j++)
	{
		if(j == m)
		j = ne[j];
		if(cnt[b[j] - '0'])
		{
			ans[i] = b[j];
			cnt[b[j] - '0']--;
		}
		else
		{
			ans[i] = '0' + ((b[j] - '0')^1);
			cnt[(b[j]-'0')^1]--;
		} 
	}
	cout << ans;
	
}
//1 -7 1 -7
signed main(){
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
	int t = 1;
//	cin >> t;
    while(t--)
	{

		solve();
	} 
}
//3 3 2 2 1 0
//1 2 1 1 1 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前后端的身份认证

1、Web 开发模式 目前主流的 Web 开发模式有两种&#xff0c;分别是&#xff1a; 基于服务端渲染的传统 Web 开发模式基于前后端分离的新型 Web 开发模式 1.1、服务端渲染的 Web 开发模式 服务端渲染的概念&#xff1a;服务器发送给客户端的 HTML 页面&#xff0c;是在服务器…

【Linux】进程间通信(万字详解) —— 下篇

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…

我的周刊(第073期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目zlib-searcher[1]zlib 开源搜索方案&#xff08;zli…

基于朴素贝叶斯算法的激光雷达点云分类

前言激光雷达技术是一种采集三维数据的、重建三维模型的手段&#xff0c;运用在各个行业&#xff0c;随着激光雷达技术的发展与广泛运用本文采用监督分类中的朴素贝叶斯算法进行地基于激光雷达的地物分类。首先根据点云的几何位置建立邻域范围&#xff0c;借助邻域点的集合计算…

分享98个PHP源码,总有一款适合您

PHP源码 分享98个PHP源码&#xff0c;总有一款适合您 PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1ZNcdj0bLY51UXNoXq8tgFg?pwdwn4b 提取码&#xff1a;wn4b 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0…

ORB-SLAM2 --- LoopClosing::ComputeSim3 函数

目录 1.什么是sim3&#xff0c;为什么要做sim3 2.函数流程 3.code 4.函数解析 4.1 准备工作 4.2 遍历闭环候选帧集&#xff0c;初步筛选出与当前关键帧的匹配特征点数大于20的候选帧集合&#xff0c;并为每一个候选帧构造一个Sim3Solver 4.3 对每一个候选帧用Sim3Sol…

实例分析Linux内存泄漏检测方法

一、mtrace分析内存泄露 mtrace&#xff08;memory trace&#xff09;&#xff0c;是 GNU Glibc 自带的内存问题检测工具&#xff0c;它可以用来协助定位内存泄露问题。它的实现源码在glibc源码的malloc目录下&#xff0c;其基本设计原理为设计一个函数 void mtrace ()&#x…

解决Tinkphp的success跳转“使用路由别名后模块和路由器访问不了”问题

遇到的问题&#xff1a;我的thinkphp5网站添加了以下路由别名&#xff1a;Route::alias([ index>index/index, ]);使用http://域名/Index/user/password.html访问正常但使用http://域名/index/user/password.html就访问失败使用$this->success(修改密码成功);进行提示跳转…

Java 链表与LinkedList

链表的组合形式 ①有头结点、无头结点 ②单向链表、双向链表 ③循环链表、非循环链表 根据自由组合&#xff0c;可以得到8种不同形式的链表&#xff0c;那么在刷题种常碰到的是不带有头结点的单向非循环链表和不带头结点的双向非循环链表。 模拟实现不带头结点的单向非循环链表…

Notes可以手动签名了

大家好&#xff0c;才是真的好。 Notes/Domino 12.0.2陆续有人下载测试了&#xff0c;关于Notes的新功能中&#xff0c;我们上一篇也介绍到了可以手动签名。 字面上的意思&#xff0c;就是你可以调出手写板&#xff0c;然后使用触屏或鼠标来进行签名&#xff0c;可以在Nomad …

javaEE 初阶 — 定时器

文章目录定时器1 什么是定时器2 标准库中定时器3 实现一个定时器3.1 实现的思路3.2 为什么要使用优先级队列来保存任务3.3 开始实现定时器 1 什么是定时器 定时器 类似于一个 “闹钟”&#xff0c;达到一个设定的时间之后&#xff0c;就执行某个指定好的代码。 定时器是一种实…

印染行业APS智能排程排产的应用意义

不得不说的印染之“痛” 在印染行业&#xff0c;因排产无法自动化、智能化&#xff0c;企业在交期、成本、生产管理方面承受着巨大的压力&#xff0c;尤其当下印染企业生产管理正从传统的粗放式转向精细化&#xff0c;这些痛点愈加凸显。 一方面&#xff0c;客户和企业面临一个…

httpd安装

一、离线安装 1、去 https://pkgs.org/ 下载httpd所依赖的7个rpm包 [基于CentOS 7 x86_64系统&#xff0c;如需其他环境可前往官网直接下载] apr-1.4.8-5.el7.x86_64.rpm apr-util-1.5.2-6.el7.x86_64.rpm apr-util-ldap-1.5.2-6.el7.x86_64.rpm postgresql-libs-9.2.24-1.el…

互联互通-标准化成熟度指标分析(未完成)

整体分析1 医疗机构基本情况2 数据资源标准化建设情况&#xff08;30 分&#xff09;2.1数据集标准化情况&#xff08;15 分&#xff09;2.1.1电子病历基本数据集 第1部分&#xff1a;病历概要&#xff08;1-4数据集&#xff09;2.1.2电子病历基本数据集 第2部分&#xff1a;门…

Jetpack Compose UI创建布局绘制流程+原理 —— 内含概念详解(手撕源码)

本文是我去年首发于稀土掘金平台的文章 全文较长&#xff1a;共1万5千字&#xff0c;适合有耐心❤️的人学习 有些概念不懂的可以去4.部分概念详解这个目录先稍微学习一下 Compose源码基于最新的Compose 版本&#xff1a;1.0.1 系统源码基于最新的Android11 版本 注意&#xff…

【蓝桥杯基础题】2020年省赛填空题—回文日期

&#x1f451;专栏内容&#xff1a;蓝桥杯刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录一、题目背景二、题目描述1.问题描述2.输入格式3.输出格式4.一个例子5. 评测用例规模与约定三、题目分析1.获取位数2.回文…

236页10万字精选数据中台建设方案2022版

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目录 1. 数据中台平台建设方案 …

数据存储大小端 网络字节序

一、概念 大端模式&#xff1a;数据的低位存放在内存的高地址中 小端模式&#xff1a;数据的低位存放在内存的低地址中 二、数据的高低位 首先需要清楚一段数据存储高低位区分 联想记忆最右边为16^0 下来16^1 比如下图二进制为例&#xff1a; 三、内存的高低位 以vs2019为…

JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配

文章目录前言一、排序规范1、happens-before原则2、找文档位置二、对象创建的过程&#xff08;后面回答的就是这几个问题&#xff09;1、一线互联网企业面试题&#xff1a; 关于对象2、对象创建过程三、对象在内存中的存储布局1、1.8版本虚拟机配置2、对象的内存布局a、普通对象…

字节三面:如何设计一个高并发系统

前言 大家好&#xff0c;我是田螺。 记得很久之前&#xff0c;去面试过字节跳动。被三面的面试官问了一道场景设计题目&#xff1a;如何设计一个高并发系统。当时我回答得比较粗糙&#xff0c;最近回想起来&#xff0c;所以整理了设计高并发系统的15个锦囊&#xff0c;相信大…