首页 > 其他分享 >Educational Codeforces Round 151 (Rated for Div. 2) C. Strong Password

Educational Codeforces Round 151 (Rated for Div. 2) C. Strong Password

时间:2023-07-07 17:24:37浏览次数:50  
标签:151 Educational Rated int res Codeforces 序列 字符串 include

题目翻译,给定t组数据,每组数据包含一个字符串s,两个长度为m的字符串l和r,要求判断是否存在一个长度为m的字符串res,满足l[i]<=res[i]<=r[i](i->0~m)且不是s的子序列

贪心

首先对于所有满足l<res<r的字符串,我们只需判断是否存在一个字符串不是子序列即可,那么我们让res成为子序列的可能性最小

如何得到最优的字符串呢,我们发现对于res[i]来说可以从l[i]到r[i]中任意选择,对于第i个字符,我们求得在经过i-1次选择后,res[i]的选项中在s中首次出现的位置,然后在所有首次出现的位置中选那个首次位置最靠后的字符串,这样可以保证选择完第i个字符后,s中可以选择的字符数量最少,因此成为子序列的可能性最小,因为每次都是选中首次出现的所以不用担心前面会有重复的

判断条件,当q[j]的长度为0时,说明不存在该子序列

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
string s,l,r;
int t,m;
queue<int> q[10];
void solve(){
	for(int i=0;i<10;i++)
	while(q[i].size()) q[i].pop();
	cin>>s;
	cin>>m;
	cin>>l>>r;
	for(int i=0;i<s.length();i++){
		q[s[i]-'0'].push(i);
	}
	int last=-1;//记录上次选中的字符位置 
	for(int i=0;i<m;i++){
		for(int j=l[i]-'0';j<=r[i]-'0';j++){
			if(q[j].size()==0){//说明该可选方案不为子序列 
				cout<<"YES"<<endl;
				return;
			}
			int u=q[j].front();
			if(u>last){
				last=u;
			}
		}
		for(int j=0;j<10;j++){//更新首次出现的位置,当last越大时每个q减少的越多,只要有一个q[j]减少为0,就不能为子序列 
			while(q[j].size()&&q[j].front()<=last) q[j].pop();
		}
	}
	cout<<"NO"<<endl;
}
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
		cin>>t;
		while(t--){
		solve();
	}
}

 

标签:151,Educational,Rated,int,res,Codeforces,序列,字符串,include
From: https://www.cnblogs.com/liyiyang/p/17535566.html

相关文章

  • CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)
    Preface补题,不得不说一边晒太阳一边想题目真的纯在折磨,眼睛要被反光晃瞎了这场ABCD和F都比较简单,E的话一个关键性质想到了但统计的时候棋差一招,G的话就是纯纯的巧妙,后面两题没看总体来说这场质量极高,可惜和考试周冲突了没法现场打的说(不过题目都是丁真题狠狠地好评)A.Tenzin......
  • 图灵喜获Stevens名著《TCP/IP Illustrated》影印版权
    图灵再获得培生教育出版集团授权,即将出版《TCP/IP详解》(3卷)的影印版。此前,图灵在2006年先后出版了《Unix环境高级编程(第2版)》的影印版和翻译版。并于2009年11月推出了《UNIX网络编程》(2卷)的影印版。后者的翻译版正在翻译校订中,预计2010年5-6月出版。《TCP/IP详解》影印版将于2010......
  • Educational Codeforces Round 150 A~D
    c题好难。A.GamewithBoardProblem-A-Codeforces题意给定若干个数字1,Alice和Bob每回合合并两个相同的数字,Alice先手。如果谁最先不能合并数字,谁就胜利。思路通过推导可以看出\(n<5\)时先手必输,否则先手胜利的策略是取得只剩下两个数字可以合并。代码voidsolve(){......
  • Educational Codeforces Round 151 (Rated for Div. 2)
    Preface期末考终于结束了,终于可以回来写题了这场是刚考完最后一门的那个晚上打的,因为太久没有写代码了所以不是很熟练而且脑子也不太灵光,只能堪堪写到D题而且手速感人上次CF第二个号因为Rating被roll了导致从紫名掉下来了,这场就把它又打上去了,再这样后面兴许要用第三个号打了......
  • Educational Codeforces Round 151 [div.2 #A-C] 赛后总结(contest/1845)
    link\(\textcolor{lightgreen}{A}-\textcolor{yellow}{B}-\textcolor{yellow}{C}-\textcolor{red}{D}-\textcolor{red}{E}-\color{red}{F}\)A给你一个数n,在给你一个数列1~k,其中x不能用,然后用其他的数任意累加,如能得到n,输出所用数字数量和具体数列。一眼分类。先分是......
  • Educational Codeforces Round 151 F. Swimmers in the Pool
    一.前言本来打算打打这个比赛玩玩,结果同学找我打游戏王去了,就没打现场(逃)因为是一道不错的数学题,来写写补题的题解这里点名批评@HOLIC喂给我的假题意,让我查错大半天,最后发现题意错了还重新推了好多东西,拳头都硬了等会儿顺便分享下假题意的一种做法二.正文简单题意:有n个......
  • CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)C
    CodeTONRound5(Div.1+Div.2,Rated,Prizes!)CC(dp)C题目给出一个数组,我们可以在这一个数组里面找出\(a_i\)和\(a_j\)其中\(i\)和\(j\)不相等,并保证\(a_i=a_j\),这样我们就可以把\(i-j\)这一段区间的所有数字都删除,问我们怎样删除才可以使删除的数字数量最多很明显,这是......
  • Educational Codeforces Round 151 (Rated for Div. 2)(C,D)
    EducationalCodeforcesRound151(RatedforDiv.2)(C,D)C(dp,子序列自动机)C题目大意就就是给你一个字符串\(s\),还给出两个边界字符串\(l\)和\(r\),长度为\(m\),问我们是否可以构造满足一下条件的字符串\(1\),第\(i\)个字符必须在\(l_i\)和\(r_i\)的双闭区间里面\(2\),......
  • Educational Codeforces Round 151 (Rated for Div. 2) A~D
     A.ForbiddenInteger模拟:voidsolve(){intn,k,x;cin>>n>>k>>x;if(x!=1){cout<<"YES\n"<<n<<"\n";for(inti=1;i<=n;i++)cout<<"1"<<"\n"......
  • Educational Codeforces Round 151 (Rated for Div
    C.StrongPassword给定一个字符串\(s\),一个密码的长度\(m\),下界字符串\(l\)和上界字符串\(r\),上下界字符串长度均为\(m\),且字符只在0~9范围内,上界字符串的第\(i\)位非严格大于下界字符串的第\(i\)位,密码的第\(i\)位需要位于\([l_i,r_i]\)内。问是否存在一个密码不是\(......