当前位置: 首页 > news >正文

[USACO04OPEN] The Cow Lineup

题目描述

约翰的 N ( 1 ≤ N ≤ 100000 ) N ( 1 \leq N \leq 100000 ) N1N100000 只奶牛站成了一列。每只奶牛都写有一个号牌,表示她的品种,号牌上的号码在 1 … K ( 1 ≤ K ≤ 10000 ) 1 \ldots K ( 1 \leq K \leq 10000 ) 1K1K10000范围内。

比如有这样一个队列:1,5,3,2,5,3,4,4,2,5,1,2,3

根据约翰敏锐的数学神经,他发现一些子序列在这个队列里出现,比如"3,4,1,3",而另一些没有。子序列的各项之间穿插有其他数,也可认为这个子序列存在。现在,他想用 1 ∼ K 1∼K 1K 之间的整数构造一个最短的子序列,使之不在奶牛序列里出现。达个子序列的长度是多少
输入格式
第1行输入两个整数 N N N K K K ,接下来 N N N 行输入奶牛序列.

输出格式s

输出一行,最短的不出现子序列的长度。

样例 #1

样例输入 #1

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

样例输出 #1

3

提示

样例解释:

所有长度为 1 1 1 2 2 2 的可能的子序列都出现了,但长度为 3 的子序列 “ 2 , 2 , 4 ” “2,2,4” “2,2,4” 却没有出现。

这道题要用到二分(也就是分治)来做这道题,首先我们要知道最短的不出现子序列的长度是什么,也就是找到一个靠后的第一次出现的数,然后,在这个第一次出现为序列的序列继续开始查找,直到发现没有出现的子序列,然后计算数列长度
以下是代码:

#include <bits/stdc++.h>
const int N=10050;
int n,k,x;
int vis[N],tot,ans;
int main(){scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&x);if(!vis[x])vis[x]=1,tot++;if(tot==k){memset(vis,0,sizeof(vis));tot=0;ans++;}}printf("%d\n",ans+1);return 0;
}
http://www.lryc.cn/news/273445.html

相关文章:

  • 软件工具集合
  • C#利用openvino部署PP-TinyPose人体姿态识别
  • MindSpore Serving与TGI框架 の 对比
  • 两阶段提交协议三阶段提交协议
  • 6-Docker Compose-tomcat application(指定官方镜像)
  • 宝塔安装的imagemagick不能用,必须自己手动安装
  • 解决在test以外的目录下导入junit无效
  • docker 在线安装mysql 8.0.21版本
  • WPF DatePicker与Calendar的使用和样式修改
  • 从0开始python学习-40.通过正则表达式/json进行接口关联
  • 【React系列】高阶组件
  • 听GPT 讲Rust源代码--src/tools(38)
  • .NET C# 如何获取object对象的数据
  • 使用IDEA创建使用 JDK8 的 2.x.x 版本的 Spring Boot 项目以及 Spring Boot 项目如何修改JDK版本
  • 游戏服务器整体架构思考
  • labelme 标注的数据集转化为Mask-Rcnn适用的数据集
  • x-cmd pkg | tig - git 文本模式界面
  • 信息论与编码期末复习——概念论述简答题(一)
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目
  • 二叉排序树的创建、插入、查找和删除【数据结构】
  • 【管理篇 / 恢复】❀ 07. macOS下用命令刷新固件 ❀ FortiGate 防火墙
  • 工作纪实40-使用redis的几种姿势
  • 修改 docker /dev/shm 的大小
  • 【观察】Aginode安捷诺:坚守“长期主义”,服务中国数字经济
  • HttpClient库与代理IP在爬虫程序中的应用
  • C#最佳工具集合:IDE、分析、自动化工具等
  • promethues grafana 安装和使用
  • 华为DriveONE电机控制器拆解实拍
  • 【git使用】历史commit的分割(git rebase和 git reset的联合使用)
  • 栈和队列oj题——225. 用队列实现栈