Problem Description
小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否能找到一个k 的区间,里面的 k 个数字排完序后是连续的。

现在小度熊增加题目难度,他不想知道是否有这样的 k 的区间,而是想知道有几个这样的 k 的区间。

Input
输入包含一组测试数据。

第一行包含两个整数n,m,n代表数组中有多少个数字,m 代表针对于此数组的询问次数,n不会超过10的4次方,m 不会超过1000。第二行包含n个正整数,第 I 个数字代表无序数组的第 I 位上的数字,数字大小不会超过2的31次方。接下来 m 行,每行一个正整数 k,含义详见题目描述,k 的大小不会超过1000。

Output
第一行输"Case #i:"。(由于只有一组样例,只输出”Case #1:”即可)

然后对于每个询问的 k,输出一行包含一个整数,代表数组中满足条件的 k 的大小的区间的数量。

Sample Input
6 2 3 2 1 4 3 5 3 4
Sample Output
Case #1: 2

2

这题因为询问有1000次,所以转化为离线操作,先把所有的询问储存起来并找到询问区间长度的最大值,然后枚举寻找的区间起点,对于每个起点寻找是不是有连续k个数循环的区间。找到的判断条件:1.区间所有数都不同。2.区间的最大值减去最小值加1的值为区间的长度。可以用map判断是否出现相同的数,如果出现可以直接跳出循环,因为后面更大的区间长度肯定不满足。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
int q[1006],a[100006],sum[1006];
int main()
{int n,m,i,j,num1=0,min1,max1,maxx;while(scanf("%d%d",&n,&m)!=EOF){for(i=1;i<=n;i++){scanf("%d",&a[i]);}maxx=0;memset(sum,0,sizeof(sum)); //连续i个数的总区间个数for(i=1;i<=m;i++){scanf("%d",&q[i]);if(q[i]>maxx)maxx=q[i];}for(i=1;i<=n;i++){map<int,int>hash;hash.clear();min1=max1=a[i];for(j=1;j<=maxx && i+j-1<=n;j++){if(hash[a[i+j-1]]==0){hash[a[i+j-1]]++;if(min1>a[i+j-1])min1=a[i+j-1];else if(max1<a[i+j-1])max1=a[i+j-1];if(max1-min1+1==j)sum[j]++;}else break;}}num1++;printf("Case #%d:\n",num1);for(i=1;i<=m;i++){printf("%d\n",sum[q[i]]);}}return 0;
}

转载于:https://www.cnblogs.com/herumw/p/9464759.html

hdu5247 找连续数相关推荐

  1. hdu5247找连续数(打表)

    题意(中问题直接粘题意吧)                                 找连续数 Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否 ...

  2. hdu 5247 找连续数(思维)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 找连续数 Time Limit: 2000/1000 MS (Java/Others)    M ...

  3. 2015年百度之星初赛(1) --- B 找连续数

    找连续数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 找连续数(HDU-5247)

    Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否能找到一个k 的区间,里面的 k 个数字排完序后是连续的. 现在小度熊增加题目难度,他不想知道是否有这 ...

  5. 数组系列—连续数中寻找缺失的数字

    连续数中寻找缺失的数字 通过散列表实现: public static void find(int[] array){Hashtable<Integer,Integer> hasht=new ...

  6. 2019.7.8 校内测试题 连续数和

    题目 连续数和 (num.cpp,1s,128MB) [问题描述]: 一个正整数有可能可以被表示为 n(10^9>=n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5 ...

  7. 统计数列中是连续数的个数

    数据库环境:SQL SERVER2008R2 今天在群里看到一位网友提的需求,要求统计一组数据中前3位是连续数的个数,具体看贴图. 实现这个需求蛮简单的,说下我的思路: 取前3位,然后减去123,再和 ...

  8. 4万次下载,我的这本电子书连续数月蝉联阿里云下载榜冠军!!!

    初学Java的你还在烦恼不知道怎么去学,学习什么内容吗? 那么多的技术书籍是否已经让你无从下手? 别急,这就附上一份完整的Java学习路径.从头开始,给你一个体系化的学习方案. 结合作者(其实就是我) ...

  9. 7-160 找完数 (20 分)

    7-160 找完数 (20 分) 所谓完数就是该数恰好等于除自身外的因子之和.例如:6=1+2+3,其中1.2.3为6的因子.本题要求编写程序,找出任意两正整数m和n之间的所有完数. 输入格式: 输入 ...

最新文章

  1. AutoFac使用方法总结:Part I
  2. 廉价的悼念让死者生气,用区块链营造一个像样的纪念
  3. 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers(转)
  4. 远程连接计算机用户名怎样修改,更改服务器远程桌面用户名
  5. chrome插件下载
  6. linux下使用cat打开文件乱码
  7. android 过滤cmcc,Android 无法通过cmcc wap2.0 test解决
  8. HttpInvoker GET/POST方式
  9. 蓝桥杯2015年第六届C/C++省赛A组第一题-方程整数解
  10. 无线桥接怎么设置网关和dns服务器,斐讯K2路由器怎么设置桥接_斐讯K2无线中继设置教程-192路由网...
  11. 您未被授权查看该页 的解决办法。
  12. BMFont 制作字体时,无法导入图片
  13. 使用lettuce和redisTemplate操作redis cluster踩坑日记
  14. 汇总2022年12月托福toefl考试/解析答案为你助力
  15. html实现新闻滚动效果,jQuery实现新闻播报滚动及淡入淡出效果示例
  16. html5 meter样式,css – Chrome中的HTML5 Meter样式
  17. 计算机录屏幕和声音的软件是什么,可以录制屏幕视频声音的电脑录屏软件是什么?...
  18. H5实现全屏与F11全屏
  19. 损失函数之NLLLoss和CrossEntropyLoss
  20. JAVAEE框架整合技术之Spring02-AOP面向切面编程技术

热门文章

  1. 几点减几点怎么列算式_[股票一般几点可以买入]股票缩量怎么买 | 爱淘股吧
  2. mysql可以存布尔_哪个MySQL数据类型用于存储布尔值
  3. python判断相同,Python判断两个文件是否相同与两个文本进行相同项筛选的方法
  4. 指标实现层级_企业如何构建核心指标系统,实现业务运营效率提升90%?
  5. sql计算留存_SQL无所不能:DBA宝妈宝爸系列分享
  6. 初学者宝典:C语言入门基础知识大全(下)
  7. 用于单片机的几种C语言算法
  8. python写入并获取剪切板内容_python写入并获取剪切板内容
  9. java 类.class_面试官:Java反射是什么?我回答不上来!
  10. 同时买票是怎么实现的_去巴黎玩怎么买地铁票最划算?| 巴黎最全交通攻略