hdu2158 最短区间版大家来找碴
题意:
最短区间版大家来找碴
Problem Description
给定一个序列,有N个整数,数值范围为[0,N)。有M个询问,每次询问给定Q个整数,可能出现重复值。要求找出一个最短区间,该区间要包含这Q个整数数值。
你能找的出来吗?
Input
第一行有两个整数N,M。(N<100000, M<1000)接着一行有N个整数。再有M个询问,每个询问的第一行有一个整数Q(Q<100),第二行跟着Q个整数。当N,M同时为0时,输入结束。
Output
请输出最短区间的长度。保证有解。
Sample Input
5 2
1 2 2 3 1
3
1 2 3
3
1 1 3
0 0
Sample Output
3
2
Hint
第二个查询,找到的区间是[4,5]
思路:
这个题目做的有点纠结,我的时间复杂度没次询问都是O(N)的,那么一次测试的时间复杂度就是O(N*M)这样是1e了,这样估计就TLE了,但是却AC了,虽然理论上测试数据是随机数据,但是感觉还是有点勉强。我的思路是先找到一个最基本的L,R然后L不停的往后挤,然后维护R来保证当前的区间的正确性,同时更新最小值(这次的代码写的有点挫-_-).
#include<stdio.h> #include<string.h>#define N 110000 int num[N] ,markc[N] ,markq[N];int main () {int n ,m ,q ,a ,i;while(~scanf("%d %d" ,&n ,&m) && n + m){for(i = 1 ;i <= n ;i ++)scanf("%d" ,&num[i]);while(m--){scanf("%d" ,&q);memset(markc ,0 ,sizeof(markc));memset(markq ,0 ,sizeof(markq));int ss = 0;for(i = 1 ;i <= q ;i ++){scanf("%d" ,&a);if(!markq[a]) ss ++;markq[a] = 1;}int L ,R ,nowsum ,Ans;L = 1 ,nowsum = 0 ,Ans = n;//找到LR for(i = 1 ;i <= n ;i ++){if(markq[num[i]]) {if(!markc[num[i]]) nowsum ++;markc[num[i]] ++;if(nowsum == ss) {R = i;break;}}}Ans = R - L + 1; for(i = L ;i <= n ;i ++){if(markq[num[i]]) if(!(--markc[num[i]])){int ok = 0;for(int j = R + 1 ;j <= n ;j ++){if(markq[num[j]]){markc[num[j]] ++;if(num[j] == num[i]){ok = 1;R = j;break;}}}if(!ok) break;}if(Ans > R - i) Ans = R - i;}printf("%d\n" ,Ans);}}return 0; }
hdu2158 最短区间版大家来找碴相关推荐
- 阿杜版主 我找您有事想请教下您!!
阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您 ...
- QQ游戏辅助工具-大家来找碴(附源码)
前几天看到一个朋友在QQ上玩找碴游戏,战绩实在是惨不忍睹,便想到写一个辅助工具.(难道这是程序员的职业病,什么问题都想通过编程解决?) 原理和程序都简单,有一定编程基础和基本图像处理知识的人只要有点耐 ...
- 我的世界服务器末地文件在哪,我的世界手机版要塞怎么找 末地要塞在哪1.0.3
我的世界手机版1.0.3中的要塞怎么找?在生存模式下能找到拥有末地传送门的是最好不过的事情啦!不然无法去末地呢~那么我的世界手机版的末地要塞在哪里呢?想知道我的世界手机版要塞怎么找吗? 就让4399熊 ...
- 搜狗输入法电脑版_搜狗输入法Mac版更新:找不到哪里下载?看这里
搜狗输入法作为输入法行业的领先者积累了大量用户,这些用户已经养成使用习惯,希望在不同的设备上都可以安装搜狗输入法,但是最近有网友反应,在Mac App Store找不到搜狗输入法,其实搜狗输入法是有M ...
- AI版“大家来找茬”上线,究竟谁是真人,谁是GAN生成的假脸?
郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一直以来,都是人类用各种奇奇怪怪的问题刁难AI: 识别人脸.生成画作.理解语义.分辨文字-- 现在,人类终于也轮到被AI刁难了. MIT ...
- LocalOS 0.1.1 版发布(内附本程序源码及Java版网游找CALL示例源码)
俗话说隔行如隔山,感觉上是一回事,自己动手又是另一回事.这两天回家就帮亲戚家孩子做外挂,本以为很简单,结果泡广海逛看雪的,研究了三个半晚上才在今天接近凌晨时大体弄好.万幸自己一直在混软件这碗饭,并没真 ...
- LocalOS 0 1 1 版发布 内附本程序源码及Java版网游找CALL示例源码
俗话说隔行如隔山,感觉上是一回事,自己动手又是另一回事.这两天回家就帮亲戚家孩子做外挂,本以为很简单,结果泡广海逛看雪的,研究了三个半晚上才在今天接近凌晨时大体弄好.万幸自己一直在混软件这碗饭,并没真 ...
- wps中的相交_wps演示2016版中我找不到合并形状相交这个功能
展开全部 1.单击工具du栏上的"zhi文件"选项卡.dao 2.单击左下角的"选版项"按钮.权 3.在弹出的"PowerPoint选项"窗 ...
- js实现数字滚动显示(最短滚动版)
前言 标题解释: 数字滚动: 数字 0 变为 5,显示该数字的元素向上滚动最后显示 5 最短滚动: 数字 9 变为 1,向下滚动依次显示 9 - 0 - 1 如果这是你需要的'组件',那就继续吧! 需 ...
最新文章
- 如何在代码里配置-D 参数?
- SpringCloud之路由网关zuul(五)
- osg节点函数功能汇总
- 第3章 Linux内核调试手段之三
- 两年经验,尽然斩获多家巨头offer,如:蚂蚁、头条、PingCAP~
- 常用的开源3D游戏引擎(转)
- SEO中一些黑帽作弊方法介绍
- 网页倒计时跳转JS代码
- Spring中init-method和destroy-method的四种方式
- 著名npm包被毁,GitHub强烈谴责!开源作者因反俄给代码投毒遭猛烈抨击
- Newline required at end of file but not found.
- u盘制作启动盘后空间容量变小解决方法
- redis incr mysql_INCR
- LeetCode C++基础面试题汇总附答案(一)
- 我的职场十年:谈谈普通员工的各种低级错误
- mysql汉字拼音缩写查询
- mac上设置ms office word初始窗口大小
- 阿里巴巴收购中天微,中国“芯”指日可待!
- iOS 基于 AVFoundation 制作的用于剪辑视频项目
- 高质量C++/C 编程指南