首页 > 其他分享 >「杂题乱刷」CF1925C & CF1924A

「杂题乱刷」CF1925C & CF1924A

时间:2024-01-31 21:59:01浏览次数:33  
标签:CF1924A -- sum ++ while CF1925C 杂题 define

题目链接

CF1925C & CF1924A Did We Get Everything Covered?

解题思路

容易看出,我们可以开个桶存储当前搜索过的字母,当所有字母都有了之后就将桶清空,然后从当前搜到的位置继续存储,如果桶的清空次数小于 \(k\) 次则一定有至少一个字符串无法达到要求,这时我们只需要构造桶清空时的每一个当前搜到的字符再加上最后一个桶未搜到的字符拼接的的字符串即可,否则一定包含了所有长度为 \(n\) 的字符串。

参考代码

/*
Tips:
你数组开小了吗?
你MLE了吗?
你觉得是贪心,是不是该想想dp?
一个小时没调出来,是不是该考虑换题?
*/
#include<bits/stdc++.h>
using namespace std;
#define map unordered_map
#define forl(i,a,b) for(register long long i=a;i<=b;i++)
#define forr(i,a,b) for(register long long i=a;i>=b;i--)
#define lc(x) x<<1
#define rc(x) x<<1|1
#define cin(x) scanf("%lld",&x)
#define cout(x) printf("%lld",x)
#define lowbit(x) x&-x
#define pb push_back
#define pf push_front
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
#define ll long long
ll t,a[210];
void cl(){
	forl(i,0,30)
		a[i]=0;
}
void solve()
{
	cl();
	ll n,m,k,sum=0,ans=0;
	string s,an="";
	cin>>n>>m>>k>>s;
	forl(i,0,k-1)
	{
		a[s[i]-'a']++;
		if(a[s[i]-'a']==1)
			sum++;
		if(sum==m)
		{
			sum=0,ans++;
			cl();
			an+=s[i];
			if(ans==n)
			{
				cout<<"YES\n";
				return ;
			}
		}
	}
	cout<<"NO\n";
	cout<<an;
	forl(i,0,m)
	{
		if(!a[i])
		{
			forl(j,1,n-an.size())
				cout<<char(i+'a');
			cout<<endl;
			return ;
		}
	}
}
int main()
{
	IOS;
	t=1;
	cin>>t;
	while(t--)
		solve();
    /******************/
	/*while(L<q[i].l) */
	/*    del(a[L++]);*/
	/*while(L>q[i].l) */
	/*    add(a[--L]);*/
	/*while(R<q[i].r) */
	/*	  add(a[++R]);*/
	/*while(R>q[i].r) */
	/*    del(a[R--]);*/
    /******************/
	QwQ;
}

标签:CF1924A,--,sum,++,while,CF1925C,杂题,define
From: https://www.cnblogs.com/wangmarui/p/18000189

相关文章

  • 杂题20240131
    CF1753C思路点拨考虑一共有\(s\)个\(0\),\(n-s\)个\(1\)。最终序列的形态就是\(s\)个\(0\)在最前面,后面全部都是\(1\)。考虑在前\(s\)个位置中有\(k\)个\(1\),那么只需要将这\(k\)个\(1\)移动到后面就可以了。考虑第一次有效操作的概率,有\(\dfrac{n(n-1)......
  • 海亮01/25杂题
    海亮1月25日题单本人很菜,复盘如果出锅还请轻喷(QOJ7894link题意给定一个只由圆括号和方括号(即字符集为\(()[]\))的字符串,你现在可以任意地把若干个左括号变成右括号、把若干个右括号变成左括号,但保持括号的种类(圆或方)不变。求是否唯一存在一个变括号的方案,使得括号序列合法。......
  • 最小表示法&Manacher学习笔记+杂题
    字符串系列前言:孩子从小就自卑。四、最小表示法&Manacher学习笔记+杂题相关题单:戳我1.最小表示法最小表示法是用于解决字符串最小表示问题的方法。(1)字符串的最小表示:字符串\(s\)的最小表示为与\(s\)循环同构的所有字符串中字典序最小的字符串。循环同构指的是当字符......
  • 最小表示法&Manacher学习笔记+杂题
    字符串系列前言:孩子从小就自卑。四、最小表示法&Manacher学习笔记+杂题相关题单:戳我1.最小表示法最小表示法是用于解决字符串最小表示问题的方法。(1)字符串的最小表示:字符串\(s\)的最小表示为与\(s\)循环同构的所有字符串中字典序最小的字符串。循环同构指的是当字符......
  • 「杂题乱刷」AT_abc307_e
    链接(at)链接(luogu)dp板子。不难看出,可以设两个状态:\(dp_{i,0}\)表示第\(i-1\)位颜色与第\(1\)位颜色不同且前\(i\)位每相邻两位的颜色均不同的方案数。\(dp_{i,1}\)表示第\(i-1\)位颜色与第\(1\)位颜色相同且前\(i\)位每相邻两位的颜色均不同的方案数。......
  • 「杂题乱刷」AT_abc308_f
    链接(at)链接(luogu)简单贪心。又是一道出过很多次的板子题。容易发现,我们可以将商品价格先从小到大排序,然后使用指针维护,将所有能取的优惠价格放入单调队列里,然后取最大值,因为后面的商品同样也能取此商品去过的同样优惠,故而取最大值即可,不会对最终答案产生影响。代码:点击查看......
  • 240125 杂题选谈
    PKUSC2022Mahjonghttp://222.180.160.110:1024/contest/4813/problem/1https://www.bilibili.com/video/BV1JB4y1R7AP/这里是PKUSC当时的讲解视频。听说可以证明本题一定有\(\le5\)的解。好神奇。就比如说我们爆搜,\(9^4\times13^4\)这个显然干不动对吧,所以我们考虑......
  • Trie树学习笔记+杂题(进阶1 Trie)
    前言:回来上课吧,不然真的就没人了。现在也是没有脑子一、Trie树学习笔记+杂题(进阶1Trie)相关题单:戳我1.trie树简介字典树,英文名trie。顾名思义,就是一个像字典一样的树,核心原理就是用空间换时间,利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,所以它可以处......
  • Trie树学习笔记+杂题(进阶1 Trie)
    前言:回来上课吧,不然真的就没人了。现在也是没有脑子一、Trie树学习笔记+杂题(进阶1Trie)相关题单:戳我1.trie树简介字典树,英文名trie。顾名思义,就是一个像字典一样的树,核心原理就是用空间换时间,利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,所以它可以处......
  • 「杂题乱刷」P1558
    好久没写cnblog了,来写一下。做一下恢复训练。P1558(色板游戏)数据结构板子题?反正我一开始是不知道怎么去维护的。反正我代码分块写的跟线段树一样思路大致是把图的颜色化成二进制,然后就很好做了,注意更新时记得顺便维护答案。给大家几个样例来调代码:hack1in:100302C1......