首页 > 其他分享 >CF1925 AC

CF1925 AC

时间:2024-01-30 15:24:54浏览次数:28  
标签:std AC int void CF1925 小写字母 inline getchar

link & link

EV

直接输出 \(n\) 遍前 \(k\) 个小写字母即可。

证明

考虑对于一个题目要求的串 \(s\),能不能满足要求。

显然 \(s_1\) 可以在第一遍小写字母中找到。

DV

考虑题目给出的什么时候一定合法。

显然,如果和我们 EV 构造的串原理一致,那就一定合法。

我们注意到 \(n=2,k=3,aabccab\) 也是合法的。这就提示我们当从题目给出的串中去掉一些字母后得到的串与 EV 原理相同,也是合法的。

读者可以自证。

我们发现无法找到其它合法的串了,于是判断除了上面的情况,其它串都是不合法的。

构造

我们现在有一个不能找到 \(n\) 遍前 \(k\) 个小写字母的串。设这个串只能找到 \(m\) 遍小写字母(\(m<n\))。

我们一定可以构造出一个串 \(s\) ,使得其无法作为题目串的一个子序列。

设题目串中每遍前 \(k\) 个小写字母中的最后一个为 \(l_i\)。

我们令 \(s_i=l_i(i\le m)\)。

设字母 \(c\) 在第 \(m+1\) 遍无法找到,容易发现 \(c\) 是一定存在的。

令 \(s_{m+1}\sim s_n=c\),可以发现 \(s\) 一定无法作为一个子序列出现。

稍加思考可以发现,这个结论是正确的。非要用语言表述出来反而会很乱。

于是我们就可以按照这种构造方式通过此题。


#include<bits/stdc++.h>

typedef long long LL;
typedef std::pair<int,int> pii;

#define ok putstrln("OrzFinderHT")
//#define check_time printf("%.8f\n",clocks()/CLOCK_PER_SEC)

template<typename T>
void abs(T &N){
	if(N>=0) N=N;
	else N=-N;
}

namespace G_{
	template<typename T>
	inline void read(T &a){
		a=0;
		int f=1;
		char c=getchar();
		while(c<'0'||c>'9'){
			if(c=='-') f=-1;
			c=getchar();
		}
		while(c>='0'&&c<='9') a=(a>>1)+(a>>3)+(c&15),c=getchar();
		a*=f;
	}
	inline void get_enter(){
		getchar();
	}
	inline void get_str(std::string &str){
		char c=getchar();
		while(c!=' '&&c!='\n') str+=c,c=getchar();
	}
	template<typename T>
	inline void putN(T N){
		char stk[70];
		short top=0;
		if(N<0) putchar('-'),abs(N);
		do{
			stk[++top]=N%10+48;
			N/=10;
		}while(N);
		while(top) putchar(stk[top--]);
	}
	template<typename T>
	inline void putsp(T N){
		putN(N);
		putchar(' ');
	}
	template<typename T>
	inline void putln(T N){
		putN(N);
		putchar('\n');
	}
	inline void putstr(std::string str){
		int sz=str.size()-1;
		for(int i=0;i<=sz;i++) putchar(str[i]);
	}
	inline void putstrln(std::string str){
		putstr(str);
		putchar('\n');
	}
	inline void Yes(){
		putstrln("Yes");
	}
	inline void No(){
		putstrln("No");
	}
}

//using namespace get_give;

using namespace G_;

int vis[30];

int c_i(char c){
	return c-'a'+1;
}

signed main(){
	int T;
	std::cin>>T;
	while(T--){
		int n,k,m;
		std::cin>>n>>k>>m;
		std::string s;
		std::cin>>s;
//		get_enter();
		memset(vis,0,sizeof(vis));
		int cnt=0,sum=0;
		std::string las;
		for(int i=0;i<s.size();i++){
			if(c_i(s[i])>k) continue;
			if(vis[c_i(s[i])]==sum) cnt++,vis[c_i(s[i])]++;
			if(cnt==k) cnt=0,sum++,las+=s[i];
		}
		if(sum>=n){
			std::cout<<"YES\n";
			continue;
		}
		std::cout<<"NO\n";
		if(las.size()!=0) std::cout<<las;
		int ne=n-las.size();
		for(int i=1;i<=k;i++){
			if(vis[i]==sum) {
				char c=(char)('a'+(i-1));
				for(int j=1;j<=ne;j++) putchar(c);
				break; 
			}
		}
		putchar('\n');
	}
	return 0;
}
/*
-读入字符一定检查回车
- 能不能搜索?
-函数要有返回值!
-想好了再写!
*/

标签:std,AC,int,void,CF1925,小写字母,inline,getchar
From: https://www.cnblogs.com/BYR-KKK/p/17997185

相关文章

  • [转帖]Oracle获取被锁的SQL源头
    https://blog.csdn.net/weixin_42233789转载:https://blog.csdn.net/robinson1988/article/details/106204387各位DBA,看到这篇文章是不是很开心,解决了你一个大麻烦,赶紧把它部署到实时监控程序吧(咳咳,转载,抄袭不注明文章出处的人可耻哈)session1:updateemp_baksetename=......
  • [USACO17DEC] Greedy Gift Takers
    原题链接首先这道题的数据量1e5那么时间复杂度要保持在O(nlogn)内。先判断单调性,若k头牛拿不到礼物,那么k-1头牛也拿不到礼物,所有这题可以用二分法来做(11110000)。二分部分省略,我们直接来分析check部分(如下)。boolcheck(intk){for(inti=1;i<=n-k+1;i++)b[i]=a[i];s......
  • Powershell 并发任务 | Runspace 线程 | 结果获取
    介绍在PowerShell中进行多任务处理(Multithreading或ParallelProcessing)主要目的是提高脚本的执行效率和性能。对于需要处理大量数据或执行多个独立任务的脚本来说尤其有用。提高性能:多任务处理允许脚本同时执行多个任务,从而加快整体执行速度。对于需要处理大型数据集或执......
  • Wolfram Mathematica 14.0 macOS Universal - 现代科学计算
    WolframMathematica14.0macOSUniversal-现代科学计算全球现代技术计算的终极系统请访问原文链接:https://sysin.org/blog/mathematica/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWolframMathematica全球现代技术计算的终极系统可在桌面、云端和移动中使......
  • rdd常用的Action算子和分区操作算子
    frompysparkimportSparkConf,SparkContext#创建Spark配置和上下文对象conf=SparkConf().setAppName("SparkActionsAndPartitions")sc=SparkContext(conf=conf)#示例数据data=[("apple",1),("banana",2),("apple",3),(&quo......
  • javacore找pk锁阻塞者
    关键字 Flatlockedby3LKMONOBJECTorg/apache/logging/log4j/core/appender/OutputStreamManager@0x000000060FB6B3C0:Flatlockedby"WebContainer:3"(J9VMThread:0x0000000007C55A00),entrycount13LKWAITERQWaitingtoenter:3LKWA......
  • idea配置tomcat利用Build Artifacts打war包
    idea配置tomcat利用BuildArtifacts打war包idea有BuildArtifacts功能,可以一键打war包。这种方式适合没有maven等项目构建的。也就是老项目,把jar包放在lib里面的web项目。本人有幸参与改造公司的老项目。今天给大家分享如何打包!!!一.idea配置tomcat。我想大家都被分配到做这老项......
  • 洛谷题单指南-排序-P2676 [USACO07DEC] Bookshelf B
    原题链接:https://www.luogu.com.cn/problem/P2676题意解读:要使能够到书架顶的牛数量最少,优先选高的牛即可,直到总身高超过书架高度,简单的排序+贪心,下面给出代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=20005;inth[N];intn,b;intmain......
  • gerrit access control
    Specialandmagicreferenceshttps://vlab.noaa.gov/code-review/Documentation/access-control.html#referencesThereferencenamespacesusedingitaregenerallytwo,oneforbranchesandonefortags:refs/heads/*refs/tags/*However,everyrefe......
  • PyCharm 2023: 让代码飞翔 mac/win版
    JetBrainsPyCharm2023是一款强大的Python集成开发环境,旨在提高开发人员的生产力。这个版本带来了许多令人兴奋的新功能和改进,以帮助您更快、更有效地编写代码。→→↓↓载Pycharm2023mac/win 首先,PyCharm2023提供了对最新Python版本的全面支持,包括Python3.10。......