zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【MySQL笔记】数据定义语言DDL
    【MySQL笔记】SQL语言四大类语言
    《ggplot2:数据分析与图形艺术》,读书笔记
    【数据处理】为什么数据要取对数
    【R实践】时间序列分析之ARIMA模型预测___R篇
    【R笔记】使用R语言进行异常检测
    【R笔记】日期处理
    朴素贝叶斯分类器的应用
    数据分析的方法与技术
    爬虫 测试webmagic (一)
  • 原文地址:https://www.cnblogs.com/zquzjx/p/8583165.html
Copyright © 2011-2022 走看看