• jzoj100046. 收集卡片


    唉,本来都不想写这一题的。。。

    Description
    Star 计划订购一本将要发行的周刊杂志,但他可不是为了读书,而是—— 集卡。 已知杂志将要发行 N 周(也就是 N
    期),每期都会附赠一张卡片。Star 通 过种种途径,了解到 N 期杂志附赠的卡片种类。Star 只想订购连续的若干期,
    并在这些期内收集所有可能出现的种类的卡片。现在他想知道,他最少需要订 购多少期。

    Input
    一行一个整数 N; 第二行一个长度为 N 的字符串,由大写或小写字母组成,第 i 个字符表示 第 i
    期附赠的卡片种类,每种字符(区分大小写)表示一种卡片。

    Output
    输出一行一个整数,表示 Star 最少订购的期数。

    Sample Input
    8 acbbbcca

    Sample Output
    3

    这题两个指针不停地跳即可。
    上标:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,a[500010],l=1,r=1,now[500010],ans;
    bool bz[500010];char c;
    
    bool check()
    {
    	for (int i=1;i<=52;i++)
    		if (bz[i]==1 && !now[i]) return 0;
    	return 1;
    }
    
    int main()
    {
    	scanf("%d
    ",&n);
    	for (int i=1;i<=n;i++)
    		if ((c=getchar())>='a') a[i]=c-'a'+1,bz[a[i]]=1;
    		else a[i]=c-'A'+27,bz[a[i]]=1;
    	now[a[1]]++;while (!check()) now[a[++r]]++;ans=r;
    	while (l<=n)
    	{
    		now[a[l++]]--;
    		while (now[a[l]]>1) now[a[l++]]--;
    		while (!check() && r<=n) now[a[++r]]++;
    		if (r>n) break;
    		ans=min(ans,r-l+1);
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
    转载需注明出处。
  • 相关阅读:
    Hive分组提取TopN操作
    互联网产品评论语料的观点挖掘
    Hive实现用户访问路径还原
    java基础知识——类的继承
    SVM旅程
    基于概率的相似度定义方法
    基于概率的项目相似度之并行方法
    List接口的俩个实现的区别
    奇异值分解(SVD)
    在64位机器上使用32位的dll
  • 原文地址:https://www.cnblogs.com/jz929/p/11817860.html
Copyright © 2020-2023  润新知