zoukankan      html  css  js  c++  java
  • hdu2712(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2712

    题意:是求最短的非子串(子串不要求连续)的长度。

    分析:把序列划分为尽量多(假设为ans)的含有1~k的连续子序列,则答案就是ans+1.因为要让长度为ans的序列全部出现,必须满足第一个数字可以取1..k任意一个,第二个数字可以取1..k任意一个……以此类推当已经划分成j个子序列并无法向后划分的时候,说明第ans+1个数是不能在1..k的范围内自由选择的。

    比如题目中的数据:
    1 5 3 2 5 1 3 4 4 2 5 1 2 3
    找到两个包含1~k(k=5)的划分:
    1 5 3 2 5 1 3 4         4 2 5 1 2 3
    我们求出ans=2,这样我们得到最短非子串的长度为ans+1,就是至少要ans+1个数字才能形成非子串。

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <cstdlib>
    #include <stack>
    #include <vector>
    #include <set>
    #include <map>
    #define LL long long
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define N 10010
    #define clr(a) (memset(a,0,sizeof(a)))
    using namespace std;
    int n,k,x;
    int vis[N];
    int main()
    {
        while(scanf("%d%d",&n,&k)>0)
        {
            memset(vis,0,sizeof(vis));
            int num=0,ans=0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&x);
                if(!vis[x])
                {
                    vis[x]=1;num++;
                }
                if(num==k)
                {
                    memset(vis,0,sizeof(vis));
                    num=0;ans++;
                }
            }
            printf("%d
    ",ans+1);
        }
    }
    View Code
  • 相关阅读:
    pandas 的pd.cut()数据分箱
    pandas 的groupby()
    pandas 的DataFrame.apply()
    天池二手车_特征工程
    numpy简单的笔记
    python 面向对象编程的@property
    mybatis 复杂sql语句
    mybatis Lombok
    mybatis 获取 sqlSession
    mybatis @Param 注解
  • 原文地址:https://www.cnblogs.com/lienus/p/4197243.html
Copyright © 2011-2022 走看看