• USACO 2004 Open The Cow Lineup /// oj25965


    题目大意:

    输入n k,n头牛 k个品种

    接下来n行描述每头牛的品种

    输出无法找出的最短子序列的长度

    Sample Input

    14 5
    1
    5
    3
    2
    5
    1
    3
    4
    4
    2
    5
    1
    2
    3

    Sample Output

    3

    Hint

    All the single digit 'sequences' appear. Each of the 25 two digit sequences also appears. Of the three digit sequences, the sequence 2, 2, 4 does not appear.

     
    开始一直不理解题意 
    其实需要注意的是 如 11  22  33 或是 254 111 这类都属于其子序列 
    其实这个子序列不需要有序 就是任意组合 想明白这个就懂了
     
    解题思路来自 http://blog.csdn.net/thinfatty/article/details/75949410
    考虑长度为2的排列的情况,我们知道,
    假如说在a~b的位置出现了1~k(可以多次出现),
    而在c~d的位置也出现了1~k(可以多次出现),
    其中a<b<c<d,
    那么必定2的排列都齐了。两两配对嘛。
    所以一个长度为len的排列全部到齐的条件是,
    存在len个不交叉的1~k的段,
    不交叉的意思就是没有相同覆盖的地方。
     
    比如说 123
    在132123213中能找到不重复的三段123
    即 132 123 213 那么123所有的长度为3的任意组合都能在序列中找到
    #include<bits/stdc++.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    int main(){
        int n,k;
        while(~scanf("%d%d",&n,&k))
        {
            int ans=1,flag[10005],tmp,t=0;
            memset(flag,INF,sizeof(flag));
            while(n--)
            {
                scanf("%d",&tmp);
                if(flag[tmp]!=ans)
                {
                    flag[tmp]=ans;
                    if(++t==k) ans++,t=0;
                    //printf("tmp:%d flag[tmp]:%d ans:%d
    ",tmp,flag[tmp],ans);
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    bzoj3932 [CQOI2015]任务查询系统
    bzoj1901 Zju2112 Dynamic Rankings
    bzoj3524 [Poi2014]Couriers/2223 [Coci 2009]PATULJCI
    bzoj1529 [POI2005]ska Piggy banks
    bzoj1552 [Cerc2007]robotic sort
    bzoj2208 [Jsoi2010]连通数
    2016NOI冬令营day5
    A1035 Password (20)(20 分)
    1048 数字加密(20 分)
    福尔摩斯的约会
  • 原文地址:https://www.cnblogs.com/zquzjx/p/8583165.html
Copyright © 2020-2023  润新知