CF778A String Game 题解

文章目录

  • CF778A String Game 题解
    • 题面翻译
    • Input Data
    • Output Data
    • Input Sample 1
    • Output Sample 1
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
    • 算法:二分
    • 代码:

CF778A String Game 题解

link

题面翻译

给定两个由小写字母构成的字符串p和t,同时给定一个由数字 1 , 2 , 3... ∣ P ∣ 1,2,3...∣P∣ 1,2,3...P 组成的排列。(其中 ∣ p ∣ ∣p∣ p 表示字符串p的长度)按该排列顺序依次删除字符串 p p p 相应位置上的字母,删除过程中,约定各个字符的位置不变。请计算最多可以删除几次,字符串 p p p 中仍然包含字符串 t t t。(即字符串 t t t 仍然是字符串 p p p 的子序列)

数据保证有解

Input Data

第一行,一个字符串 p p p 1 ≤ ∣ p ∣ < ∣ t ∣ ≤ 200 , 0000 1≤∣p∣<∣t∣≤200,0000 1≤∣p∣<∣t∣≤200,0000

第二行,一个字符串 t t t

第三行,数字 1 1 1 ∣ p ∣ ∣p∣ p 组成的一个排列。

Output Data

一行,一个整数,表示最多删除的次数。

Input Sample 1

ababcbaabb5 3 4 1 7 6 2

Output Sample 1

3

题目描述

Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. But it turns out to be pretty hard for her, because she is too young. Therefore, her brother Sergey always helps her.

Sergey gives Nastya the word t t t and wants to get the word p p p out of it. Nastya removes letters in a certain order (one after another, in this order strictly), which is specified by permutation of letters’ indices of the word t t t : a 1 . . . a ∣ t ∣ a_{1}...\ a_{|t|} a1... at . We denote the length of word x x x as ∣ x ∣ |x| x . Note that after removing one letter, the indices of other letters don’t change. For example, if t = t= t= “nastya” and a = [ 4 , 1 , 5 , 3 , 2 , 6 ] a=[4,1,5,3,2,6] a=[4,1,5,3,2,6] then removals make the following sequence of words “nastya” “nastya” “nastya” “nastya” “nastya” “nastya” “nastya”.

Sergey knows this permutation. His goal is to stop his sister at some point and continue removing by himself to get the word p p p . Since Nastya likes this activity, Sergey wants to stop her as late as possible. Your task is to determine, how many letters Nastya can remove before she will be stopped by Sergey.

It is guaranteed that the word p p p can be obtained by removing the letters from word t t t .

输入格式

The first and second lines of the input contain the words t t t and p p p , respectively. Words are composed of lowercase letters of the Latin alphabet ( $ <=|p|<|t|<=200000$ ). It is guaranteed that the word $ p $ can be obtained by removing the letters from word t t t .

Next line contains a permutation a 1 , a 2 , . . . , a ∣ t ∣ a_{1},a_{2},...,a_{|t|} a1,a2,...,at of letter indices that specifies the order in which Nastya removes letters of t t t ( 1 < = a i < = ∣ t ∣ 1<=a_{i}<=|t| 1<=ai<=t , all a i a_{i} ai are distinct).

输出格式

Print a single integer number, the maximum number of letters that Nastya can remove.

样例 #1

样例输入 #1

ababcba
abb
5 3 4 1 7 6 2

样例输出 #1

3

样例 #2

样例输入 #2

bbbabb
bb
1 6 3 4 2 5

样例输出 #2

4

提示

In the first sample test sequence of removing made by Nastya looks like this:

“ababcba” “ababcba” “ababcba” “ababcba”

Nastya can not continue, because it is impossible to get word “abb” from word “ababcba”.

So, Nastya will remove only three letters.

算法:二分

  1. 二分枚举什么?我们可以枚举删除的元素个数

  2. 可行性?假设删去 x x x 个元素可行,那么删去 x − 1 x - 1 x1 个元素也肯定可行。因此二分的序列有单调性,该二分成立。

  3. check 函数怎么写?判断删掉 x x x 个元素后是否包含序列 t t t 即可。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=2e6+10;
ll n,nt,a[N],l,r,mid,ans;
string p,t;
bool check(ll x){string k=p;ll ct=0;for(int i=1;i<=x;i++) k[a[i]-1]=' ';for(int i=0;i<n;i++){if(k[i]==t[ct]) ct++;if(ct==nt) return 1; }		return 0;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>p>>t;n=p.size(),nt=t.size();for(int i=1;i<=n;i++) cin>>a[i];r=n;while(l<=r){mid=l+r>>1;if(check(mid)) ans=mid,l=mid+1;else r=mid-1;}cout<<ans;return 0;
}

感谢大家的支持~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VsCode指定插件安装目录

VsCode指定插件安装目录 VsCode安装的默认目录是在用户目录(%HomePath%)下的.vscode文件夹下的extensions目录下&#xff0c;随着安装插件越来越多会占用大量C盘空间。 指定VsCode的插件目录 Vscode安装目录&#xff1a; D:\Microsoft VS Code\Code.exeVscode插件安装目录&a…

Jenkins配置node节点

1、添加节点 2、配置node主机的java环境 注意&#xff0c;jdk的位置和版本要和master保持一致 sudo apt-get update sudo apt-get install openjdk-8-jre vim /etc/enviroment写入&#xff1a;export JAVA_HOME/usr/lib/jvm/openjdk-8-jre 按wq!退出 再输入&#xff1a;s…

压缩感知(Compressed Sensing,CS)的基础知识

压缩感知&#xff08;Compressed Sensing&#xff0c;CS&#xff09;是一种用于信号处理的技术&#xff0c;旨在以少于奈奎斯特采样定理所要求的样本频率来重构信号。该技术利用信号的稀疏性&#xff0c;即信号可以用较少的非零系数表示。压缩感知在图像获取中的应用使得在采集…

Linux调优指南

更多相关知识可以阅读&#xff1a; https://www.yuque.com/treblez/qksu6c/yxl59pkvczqot9us https://www.yuque.com/treblez/qksu6c/nqe8ip59cwegl6rk 本文不会讲解基础知识。 CPU 设置调度器 这几个调度类的优先级如下&#xff1a;Deadline > Realtime > Fair 如果你…

【OpenAI发布Sora视频模型,高保真AI视频成真了!】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要Sora技术报告总结 简述概要 隆重介绍 Sora&#xff0c;文本转视频模型。Sora 可以生成长达一分钟的视频&#xff0c;同时保持视觉质量并遵守用户的提示。又是哪些职业要被AI替代了&#xff01; Sora技术报告 作为…

Error creating bean with name ‘formContentFilter‘ defined in class path

问题描述 运行之前能正常的项目出现以上报错&#xff0c;提示创建“formContentFilter”时错误&#xff1b;org.springframework.boot版本2.4.8 org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name formContentFilter define…

【医学大模型 补全主诉】BioGPT + LSTM 自动补全医院紧急部门主诉

BioGPT LSTM 自动补全医院紧急部门主诉 问题&#xff1a;针对在紧急部门中自动补全主诉的问题子问题1: 提高主诉记录的准确性子问题2: 加快主诉记录的速度子问题3: 统一医疗术语的使用子问题4: 减少打字错误和误解子问题5: 提高非特定主诉的处理能力 解法数据预处理神经网络方…

【MATLAB源码-第140期】基于matlab的深度学习的两用户NOMA-OFDM系统信道估计仿真,对比LS,MMSE,ML。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 深度学习技术在无线通信领域的应用越来越广泛&#xff0c;特别是在非正交多址接入&#xff08;NOMA&#xff09;和正交频分复用&#xff08;OFDM&#xff09;系统中&#xff0c;深度学习技术被用来提高信道估计的性能和效率。…

MybatisPlus创建时间不想用默认值

我们知道&#xff0c;MybatisPlus可以给一些字段设置默认值&#xff0c;比如创建时间&#xff0c;更新时间&#xff0c;分为插入时设置&#xff0c;和更新时设置。 常见的例子&#xff1a; /*** 创建时间*/ JsonFormat(shape JsonFormat.Shape.STRING, pattern"yyyy-MM…

自养号测评低成本高效率推广,安全可控

测评的作用在于让用户更真实、清晰、快捷地了解产品以及产品的使用方法和体验。通过买家对产品的测评&#xff0c;也可以帮助厂商和卖家优化产品缺陷&#xff0c;提高用户的使用体验。这进而帮助他们获得更好的销量&#xff0c;并更深入地了解市场需求。因此&#xff0c;测评在…

区块链 之 默克尔树

默克尔树简介 欢迎阅读 BTC网络 之 区块裁剪 什么是默克尔树&#xff1f; 默克尔树&#xff08;Merkle Tree&#xff09;是一种树状数据结构&#xff0c;被广泛用于比特币等区块链系统中&#xff0c;用于高效地组织和验证数据的完整性。这个树状结构由唯一的根哈希值标识&am…

PostgreSQL按日期列创建分区表

在PostgreSQL中&#xff0c;实现自动创建分区表主要依赖于表的分区功能&#xff0c;这一功能从PostgreSQL 10开始引入。分区表可以帮助管理大量数据&#xff0c;通过分布数据到不同的分区来提高查询效率和数据维护的便捷性。以下是在PostgreSQL中自动创建分区表的一般步骤&…