http://lightoj.com/volume_showproblem.php?problem=1100

刚一看到这题,要询问这么多次,线段树吧,想多了哈哈,根本没法用线段树做。

然后看看数据范围纯暴力的话肯定超时。然后比赛时就liao那了。

今天是补题,然后做这题,前两发傻逼呵呵的想了一种暴力方法,报着也许能过的心态交了,果然没让我失望超时了。

不说这些没用的了,下面说说这题是咋做的。

没用什么高深的算法,好像算法都没用,就纯暴力写的,关键是加入一种常识来优化。传说中的鸽巢原理,其实有点常识的就会,只不过脑子笨想不到我。

鸽巢原理看这篇博客http://blog.csdn.net/pi9nc/article/details/8506306

题目给的数据是所给的n个数据的范围为[1,1000];

再看n 给的范围为1e+5;每次询问给你x1,x2,然后找[x1,x2]中两个数相差最小的距离。

那么如过x2-x1>1000,那么在[x1,x2]范围内肯定有重复的数,这个应该很好里解,因为其中每个数的范围都是[1,1000];

假如每个数都不一样那没其中必定有一个数要大于1000,与所给的范围矛盾,然后这种情况特判一下就行。这就用到鸽巢原理了,是不是很简单。

然后每次询问的复杂度就是1000了,那么总的复杂度为q*1000*2;

然后每次询问暴力就行了。

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<stdlib.h>
4 #include<string.h>
5 using namespace std;
6 int b[1005];
7 int main(void)
8 {
9 int aa[100005];
10 int n,i,j,k,p,q,x1,x2;
11 scanf("%d",&n);
12 for(i=1; i<=n; i++)
13 {
14 scanf("%d %d",&p,&q);
15 for(j=0; j<p; j++)
16 {
17 scanf("%d",&aa[j]);
18 }
19 printf("Case %d:\n",i);
20 while(q--)
21 {
22 memset(b,0,sizeof(b));
23 scanf("%d %d",&x1,&x2);
24 if(x2-x1>1000)
25 {
26 printf("0\n");
27 }//特判
28 else
29 {
30 for(j=x1; j<=x2; j++)
31 {
32 b[aa[j]]++;
33 }//记录出现的数字的个数。
34 int cnt=-1;
35 int vv=2000;//记录最小差距,赋初值大于1000
36 for(j=1; j<=1000; j++)//从1开始循环到1000,所给的范围为【1,1000】;
37 {
38 if(b[j]>=2)
39 {
40 vv=0;
41 break;
42 }//如果出现重复出现多于一个的直接跳出
43 if(b[j]!=0&&cnt!=-1)
44 {
45 if(vv>j-cnt)
46 {
47 vv=j-cnt;
48 }
49 cnt=j;
50 }
51 if(cnt==-1&&b[j]!=0)
52 {
53 cnt=j;
54 }
55 }//这样循环是根据数列的递增的性质,出现的前后个数间保证了间距最小。
56 printf("%d\n",vv);
57 }
58 }
59
60 }
61 return 0;
62 }

light oj 1100 - Again Array Queries(暴力,鸽巢原理)的更多相关文章

  1. Light oj 1100 - Again Array Queries (鸽巢原理+暴力)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1100 给你n个数,数的范围是1~1000,给你q个询问,每个询问问你l到r之间 ...

  2. HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  3. Find the duplicate Number (鸽巢原理) leetcode java

    问题描述: Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive ...

  4. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  5. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  6. cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)

    B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. poj 2356 Find a multiple(鸽巢原理)

    Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...

  8. poj2356 Find a multiple(抽屉原理|鸽巢原理)

    /* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...

  9. NYOJ 417 死神来了 鸽巢原理

    死神来了 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 有一天,王小子在遨游世界时,遇到了一场自然灾害.一个人孤独的在一个岛上,没有吃的没有喝的.在他饥寒交迫将要死亡时 ...

随机推荐

  1. MybatisPlus入门程序

    参考资料:MybatisPlus官网 环境搭建 创建数据库 CREATE DATABASE `mybatisplus` ​ USE `mybatisplus` ​ CREATE TABLE `user ...

  2. 华为AppTouch携手全球运营商,助力开发者出海

    内容来源:华为开发者大会2021 HMS Core 6 APP services技术论坛,主题演讲<华为AppTouch携手全球运营商,助力开发者出海>. 演讲嘉宾:华为消费者云服务App ...

  3. Oracle—merge into语法

    oracle的merge into语法,在这种情况下: 基于某些字段,存在就更新,不存在就插入: 不需要先去判断一下记录是否存在,直接使用merge into merge into 语法: MERGE ...

  4. 【Linux】【Basis】【网络】网络相关的内核参数

    Linux系统内核设置优化tcp网络,# vi /etc/sysctl.conf,添加以下内容 net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies.当出现SYN等待 ...

  5. 【编程思想】【设计模式】【测量模式Testability】Setter_injection

    Python版 https://github.com/faif/python-patterns/blob/master/dft/setter_injection.py #!/usr/bin/pytho ...

  6. Linux基础命令----smbclient

    smbclient smbclient是一个smb服务器的客户端的管理程序,可以交互式的访问samba服务器. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.SU ...

  7. OSGI与Spring结合开发web工程

    简介: 作为一个新的事实上的工业标准,OSGi 已经受到了广泛的关注, 其面向服务(接口)的基本思想和动态模块部署的能力, 是企业级应用长期以来一直追求的目标.Spring 是一个著名的 轻量级 J2 ...

  8. JS 的三种定义变量 var let const

    Let 只在 let 命令所在的代码块内有效,在外就会报错 Let 是块级作用域,函数内部使用let定义后,对函数外部无影响 Let/const 不存在变量提升,使用前一定要声明后,在使用,否则会报错 ...

  9. springmvc中文件跨服务器传输的方法

    //1.首先在tomcat的新端口上重新开启一个tomcat服务器fileuploadserver服务器,并且在webapps下新建一个uploads文件夹 //2.在业务服务器上书写前端页面和后端的 ...

  10. uni-app使用腾讯地图注意点

    地图map组件使用腾讯地图自定义样式: 1:在使用地图map组件腾讯地图时,获取本地定位,经纬度转地址与地址转经纬度解析时,小程序可以直接使用.但是h5版本会报跨域问题,目前前端没有找到更好的解决方法 ...