首页 > 其他分享 >1403 [CF 701C] They Are Everywhere

1403 [CF 701C] They Are Everywhere

时间:2024-11-29 11:33:10浏览次数:8  
标签:mm cnt int CF ++ Everywhere str 1403 size

双指针记录范围内字段的 字母哈希次数 得到最小范围包含所有字母

// 1403 [CF 701C] They Are Everywhere.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/22/problem/1092

给你一个长度为 n 的字符串,字符串由大小写英文字母组成。

你需要求出一个长度最短的子串,使得子串中包含了字符串中所有字符。

请输出满足条件的最短子串的长度。

输入格式
输入第一行一个整数 n。

接下来一行一个长度为 n 的字符串 s。

输出格式
输出一行一个数表示答案。

样例输入1
7
bcAAcbc
样例输出1
3
样例输入2
6
aaBCCe
样例输出2
5
数据范围
对于 100%的数据,保证 1≤n≤105。
*/
#include <iostream> 
#include <string>
#include <unordered_map>

using namespace std;

string str;
unordered_map<char, int> mm;
int cnt;
int n;

int main()
{
	cin >> n >> str;
	int ans = 0x3f3f3f3f;
	unordered_map<char, int> check; int checkcnt = 0;
	for (int i = 0; i < str.size(); i++) {
		if (check[str[i]] == 0) {	checkcnt++;}
		check[str[i]]++;
	}

	mm[str[0]] = 1; cnt = 1;
	int l = 0; int r = 0;
	while (l < str.size() && r < str.size()) {
		if (cnt == checkcnt) {
			ans = min(ans, r - l + 1);
			mm[str[l]]--;
			if (mm[str[l]] == 0) cnt--;
			l++;
		}
		else {
			r++;
			if (r < str.size()) {
				mm[str[r]]++;
				if (mm[str[r]] == 1) cnt++;
			}
		}
	}

	cout << ans << endl;

	return 0;                          
}

标签:mm,cnt,int,CF,++,Everywhere,str,1403,size
From: https://www.cnblogs.com/itdef/p/18576225

相关文章

  • CF1479E School Clubs 题解
    感觉这种题都比较套路。思路我们考虑定义势能函数\(\Phi(x)\),满足:对于一个随机过程,\(E(\Phi(A_{x+1})-\Phi(A_{x})|A_x,\cdots,A_0)=-1\)。\(\Phi(A_t)\)为定值,并且\(\Phi(A_t)=\Phi(A_i)\)当且仅当\(i=t\)。此时,\(\Phi(x)+x\)为离散时间鞅。根据停时定理,\(E(\Phi(A......
  • 【菜笔cf刷题日常-1400】C. Johnny and Another Rating Drop(位运算,数学)
    链接:Problem-1362C-Codeforces题意:给出一个n,求出0~ n在二进制下每相邻两数的不同位数的总和。思路:先列了几个找了一下规律,取i 在 0~ n之间,当i 等于  时,其不同位数等于k。并且可以进一步发现:  之前的总和= 之前的总和 +(k-1)。并且对于任......
  • CF2041D Drunken Maze
    D.DrunkenMaze原题链接Youaregivenatwo-dimensionalmazewithastartandendposition.Yourtaskistofindthefastestwaytogetfromthestarttotheendposition.Thefastestwayistomaketheminimumnumberofstepswhereonestepisgoingleft,r......
  • CF 3000+
    CF1981F/*3000首先有朴素的dp:\(f_{u,i}\)表示以\(u\)为根的子树已经finish了,经过\(u\)往上走的路径MEX为\(i\)。\(i\)的取值是\([1,n+1]\bigcap\mathbb{Z}\),因为一共只有\(n\)个点。转移的时候分情况,看看子树往上走的路径是在\(u\)断开还是继续向上延......
  • 「杂题乱刷2」CF2038B
    题目链接CF2038BMakeItEqual题意简述这东西好久没写了啊。阿瓦在一个幻想王国里。他走在草坪上,发现有\(n\)个数字精灵祝他生日快乐。阿瓦非常开心。因为最多可能会有\(2\times10^5\)个精灵为他庆生。但是,对于每个数字精灵都有一个饱食度\(a_i\),如果有任意两个数......
  • app.Environment.IsDevelopment、app.UseStaticFiles() 、在ASP.NET Core应用程序中,调
    在ASP.NETCore应用程序中,app.UseStaticFiles()是一个中间件方法,用于启用对静态文件的服务。这意味着当你的应用程序接收到对静态资源(如HTML文件、CSS文件、JavaScript文件、图片等)的请求时,UseStaticFiles中间件会处理这些请求并提供相应的文件。在ASP.NETCore应用程序中,app.E......
  • 【VMware VCF】基于 RDU 方式更新 VCF 环境中的 vCenter Server 组件。
    ReducedDowntimeUpgrade(RDU)是一种基于“迁移”的vCenterServer更新方式,通过临时部署一个与源vCenterServer完全一致的目标vCenterServer(类似于跨版本vCenterServer升级),然后找一个维护窗口期完成源vCenterServer和目标vCenterServer的切换即可,由于使用RDU更新......
  • [题解]CF1063B Labyrinth
    CF1063BLabyrinth~Codeforces数据范围较小,考虑使用搜索。由于向左向右的步数限制过大,我们只能用\(x,y\)进行记忆化,否则空间和时间都过不去。既然状态只有\(x,y\),我们就要让最优情况最先被遍历到,所以考虑BFS。我们考虑,对于\((x,y)\)状态来说,什么样的情况是最优的?显然,对于......
  • CF2039E - Shohag Loves Inversions
    CF2039E-ShohagLovesInversions题面有一个整数数组\(a=[0,1]\),可以重复执行以下操作任意多次:假设\(k\)是当前数组\(a\)中的逆序对的个数。将\(k\)插入\(a\)中的任意位置,包括开头或结尾。例如,如果是\(a=[4,6,2,4]\),那么逆序对数就是\(k=3\)。因此,......
  • [题解]CF1775E The Human Equation
    来个另类解。思路手玩一下样例,发现减法只会用在正数上,加法只会用在负数上,大概是因为如何在负数上用了减法或在正数上用了加法,都需要额外的次数去消掉。然后注意到在两个正数中间包这的所有负数可以直接缩成一个数,两个负数中间包着的所有正数也可以直接缩成一个数。那么现在的序......