描述

给你一个长度为n的数字串,数字串里会包含1-m这些数字。如果连续的一段数字子串包含了1-m这些数字,则称这个数字字串为NUM串。你的任务是求出长度最短的NUM串是什么,只需要输出这个长度即可。
1<=n,m<=200000

输入格式

第一行给定n和m。 
第二行n个数,表示数字串,数字间用空格隔开。

输出格式

如果存在NUM串则输出最短NUM串长度,否则输出“NO”。

测试样例1

输入

5 3 
1 2 2 3 1

输出

3

代码

 #include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,m,num[],a[],mn;
int cnt,l=,r=;//用两个指针,分别指向头和尾 void print(){
for(int i=;i<=m;i++) printf("%d ",num[i]);
puts(" ");
} int main(){
// freopen("01.txt","r",stdin);
scanf("%d%d",&n,&m);
cnt=m;
if(n<m){//n<m不可能有数字串
cout<<"NO"<<endl;
return ;
}
for(int i=;i<=n;i++)
scanf("%d",&a[i]); for(;r<=n;r++){//尾后移
if(num[a[r]]==) {
++num[a[r]];
--cnt;
}
else ++num[a[r]];
if(cnt==) break;
}
if(cnt>){
cout<<"NO"<<endl;
return ;
} mn=r-l;//l此时为0
while(l<=n){//头后移
++l;
// printf("l=%d r=%d\n",l,r);
// print();
if(num[a[l]]==) --num[a[l]],++cnt;
else --num[a[l]];
// cout<<cnt<<endl;
if(cnt==) {mn=min(mn,r-(l+)+);continue;} ++r;
for(;r<=n;++r){
if(num[a[r]]==) ++num[a[r]],--cnt;
else ++num[a[r]];
if(cnt==) break;
}
if(cnt) break;
else mn=min(mn,r-(l+)+);
}
printf("%d\n",mn);
return ;
}

cnt用于记录当前是否还需要添加元素

TYVJ P1063 数字串 Label:双指针 线性扫描的更多相关文章

  1. TYVJ P1047 乘积最大 Label:dp

    背景 NOIP 2000 普及组 第三道 描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力 ...

  2. 【CF676C】Vasya and String(二分查找,线性扫描尺取法)

    题意: 给出一个长度为n的字符串,只有字符'a'和'b'.最多能改变k个字符,即把'a'变成'b'或把'b'变成'a'. 问改变后的最长连续相同字符的字串长度为多少. 首先是二分查找,好想也好写 .. ...

  3. 解决 PHPExcel 长数字串显示为科学计数

    解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...

  4. Openjudge 1.13-40 提取数字串按数值排序

    40:提取数字串按数值排序 查看 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个字符串,请将其中的所有数字串提取,并将每个数字串作为整数看待(假设可以用int 表示),按从 ...

  5. IT公司100题-25-求字符串中的最长数字串

    问题描述: 实现一个函数,求出字符串中的连续最长数字串.例如输入”12345cbf3456″,输出”12345″. 函数原型为: void conti_num_max( const char * sr ...

  6. parseInt在IE8转换返回不相等(parseInt("08")返回0等以0开头大于7的数字串)

    描述 在IE8内核下parseInt("08")返回0,等以0开头大于7的数字串返回的值不相等 解决方法 parseInt当不指定radix时,当以0x开头时,s按照十六进制计算的 ...

  7. 【模拟】Vijos P1005 超长数字串

    题目链接: https://vijos.org/p/1005 题目大意: 无限的正整数按顺序拼接成字符串S(S=12345678910111213...),给你一个字符串A(len<=200)求 ...

  8. 【hihocoder 1249 Xiongnu's Land】线性扫描

    2015区域赛北京赛区的三水,当时在赛场上没做出的原因是复杂度分析不正确导致把方法想复杂了.近来复习复杂度分析,觉得不能只是笼统地看渐进复杂度(big-O),更应根据算法的伪码计算真正的以基本操作数为 ...

  9. 基于visual Studio2013解决面试题之0908最大连续数字串

     题目

随机推荐

  1. OpenGL实现三维立方体交互

    http://yunpan.cn/cs62JgxTNs98C  (提取码:668e)

  2. 从Trie谈到AC自动机

    ZJOI的SAM让我深受打击,WJZ大神怒D陈老师之T3是SAM裸题orz...我还怎么混?暂且写篇`从Trie谈到AC自动机`骗骗经验. Trie Trie是一种好玩的数据结构.它的每个结点存的是字 ...

  3. 能用Shell就别编程-海量文本型数据的处理

    对于txt文本类数据,优先采用shell脚本,实在不行才用Python,Java,MySQL 1) Shell命令行或脚本的处理速度极快,比Java快得多. 2) Shell代码量少,几个命令就能完成 ...

  4. ubuntu14.04安装chrome

    到https://www.google.com/chrome/browser/desktop/index.html可下载指定版本的deb文件. 32bit: wget https://dl.googl ...

  5. linux下复制一个文件的内容到另一个文件

    cat path/to/file/filename1 >> path/to/file/filename2 例如: cat id_rsa.pub >> ~/.ssh/author ...

  6. java 实现二分查找法

    /** * 二分查找又称折半查找,它是一种效率较高的查找方法. [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. * @author Administrator * */ p ...

  7. velocity的string转数字,numberTool

    velocity的string转数字,非常有意思: 1.通过java的包装类进行转换 #set($intString = "20") #set($Integer = 0) $Int ...

  8. js删除提醒

    2014年7月3日 16:28:03 html <input type="submit" name="submit" value="删除&quo ...

  9. (转)SQL Server 中WITH (NOLOCK)浅析

    概念介绍 开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用如 ...

  10. C# 支持多种语言

    通过Resource文件建立本地化. net 资源文件名(这里是Resource1.resx)由根名称(即Resource1),本地语言名称(默认情况下还没有)及扩展名组成,在读取资源时,资源管理器会 ...