题1  Noip的快乐

(happy.pas/c/cpp)

【问题描述】

终于到了一年一度的Noip比赛了,多么令人期待和兴奋的一天!其实,人们最高兴的还不是遇见老朋友,而是结交新朋友。可是结交新的朋友就需要很多时间,而除了考试之外时间并不多。例如小L,他在NOIP的入口处等待开门时,决定趁机和其它市县的牛们多套近乎。可是队伍太长,且人们都很自觉的站成仅仅一列,而小L又很想多交不同地方的朋友,因此小L想知道他在哪一个区域内可以结交到最多的不同地方的朋友。当然,这个区域不能太大,否则还没考试他就累死了。

现在有n个人,题目给出了他们每个人所在市县的编号。他们站在一个从左向右的队伍中。小L不在队列中。他想找到一个长度不超过D的区域,使他能够找到最多的不同地方的朋友。要求输出能找到的朋友所在不同市县的最大数和找到这些朋友的最小区间长度。比如在整个队伍内他按从左向右顺序找到了3个A地朋友,1个B地朋友,1个C地朋友。假设D = 5,那么不同市县的最大数为3(A地、B地、C地),最小区间长度为3(只须结交A地的最右面的一个人即可得到最大市县数3,因此区间长度不是5而是3)。假设在队伍内的人他都还没有结交。

【输入格式】happy.in

输入文件第一行为两个正整数n,D。分别表示队伍人数和他想找到的最长的区间长度。

接下来的n行,每行有一个整数,表示每个人所在市县的编号(从左向右)。

【输出格式】happy.out

输出数据为一行,这行有两个整数,用空格分开,按顺序分别代表能找到的朋友所在不同市县的最大数和找到这些朋友的最小区间长度。

【输入样例】

5 4

1

1

1

2

3

【输出样例】

3 3

【数据规模】

对于 100% 的数据,保证5<=n<=1000000, 1<=D<=n, 所有市县编号不超过32767。

大神的题解:

 Noip的快乐

这个题目和某年某省省选题目十分相像,采用队列数据结构,用I,J两个指针过一遍,O(n)算法即可AC.每次都inc(I)(对于PASCAL)(i++,对于C/C++),即可。当发现I,j之间的长度超过了D,或者右面的第i个的省市和左面的第j个的省市相同,j指针.同时随时刷新一个存储某个市县编号在区间[I,j]中出现的次数,根据I,j的变化而随时变化。如果成了0,将最大市县数减1,如果等于1,最大市县数加一并随时记录最值。

(简单的说:就是刚开始头指针指向第一个元素,如果尾指针==头指针,头指针就往后移)

具体实现是这样的:

1.调用两个数组a[1000000],b[32767]

a[i]就是读入的城市编号,b[i]用来储存在i城市中的人数;

2.k用来储存在区间下不同的城市个数

3.max:在区间下最大的城市个数;min:最大城市个数需要的最短区间(这两个值是不断更新的

附上代码:

#include<cstdio>
#include<cstring>
using namespace std;
int a[],b[];
int main()
{
int i,j=,max=,min=;
int n,maxd,k=; freopen("happy.in","r",stdin);
freopen("happy.out","w",stdout);
memset(b,,sizeof(b));
scanf("%d%d",&n,&maxd); for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
} i=;
while (i<=n)
{
b[a[i]]++;
if (b[a[i]]==) k++;
while ((b[a[j]]>) || ((i-j+)>maxd))
{
b[a[j]]--;
if (b[a[j]]==) k--;
j++;
}
if (k>max)
{
max=k;
min=i-j+;
}
if ((k==max)&& (min>i-j+)) min=i-j+; i++;
}
printf("%d %d",max,min); return ;
}

source

之前写p从来没有注意过优先级问题。。
这次被坑了一次。。mark
还好自己在调试的时候发现,
if ((k==max)&& (min>i-j+)) min=i-j+;
这个之前没有加括号的语句,在运行之后k神奇的变成了0...orz
下次注意...这种傻逼错误不要犯啦嗯~~

mark

长乐集训2012.7.11 happy(指针技巧的运用)的更多相关文章

  1. C++11智能指针之std::unique_ptr

    C++11智能指针之std::unique_ptr   uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...

  2. P2260 [清华集训2012]模积和 【整除分块】

    一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...

  3. P2260 [清华集训2012]模积和

    P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...

  4. c++11 智能指针 unique_ptr、shared_ptr与weak_ptr

    c++11 智能指针 unique_ptr.shared_ptr与weak_ptr C++11中有unique_ptr.shared_ptr与weak_ptr等智能指针(smart pointer), ...

  5. 「长乐集训 2017 Day10」划分序列 (二分 dp)

    「长乐集训 2017 Day10」划分序列 题目描述 给定一个长度为 n nn 的序列 Ai A_iA​i​​,现在要求把这个序列分成恰好 K KK 段,(每一段是一个连续子序列,且每个元素恰好属于一 ...

  6. 如何规范移动应用交互设计?UI/UX设计师须知的11个小技巧

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 十年前,手机的使用只是为了沟通. 而近几年,情况发生了很大变化,我们很难找到不使用手机的人.手机在极 ...

  7. C++11——智能指针

    1. 介绍 一般一个程序在内存中可以大体划分为三部分——静态内存(局部的static对象.类static数据成员以及所有定义在函数或者类之外的变量).栈内存(保存和定义在函数或者类内部的变量)和动态内 ...

  8. 【C++11新特性】 C++11智能指针之weak_ptr

    如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr.在学习weak_ptr之前最好对shared_ptr有所了解.如果你还不知道shared_ptr是何物,可以看看我的另 ...

  9. 详解C++11智能指针

    前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用. C++11智能指针介 ...

随机推荐

  1. 由一道面试题想到的:Finally

    找工作时,有这样一道题: try{}里面有一条return语句,那么紧跟在这个try后的finally{}里的代码会不会执行,什么时候执行,在return之前还是之后? 我没有怎么思考,根据脑子里仅有 ...

  2. UI測试内容

    我们在实际工作其中,针对web应用程序,也就是常常所说的B/S系统,能够从例如以下方面来进行用户界面測试: 导航測试 导航描写叙述了用户在一个页面内操作的方式,在不同的用户接口控制之间,比如butto ...

  3. 数据结构《21》----2014 WAP 第一个问题----Immutable queue

    2014 WAP第一个问题----实现一个不可改变的队列: 看似非常easy.. 其实,不同的版本号之间的效率差距可能是巨大的.. 甚至难以想象. . 使用前STL图书馆queue我们进行了比较.大差 ...

  4. 首先运行application的name相应的类或做activity中间name相应的类?

    今天找到该程序条目中找到以下两个条件name我写了一个测试程序,一般如以下: 看mainfest.xml <application android:allowBackup="true& ...

  5. 跳水Hibernate(一)实例解说

    此语一与高二接触SSH三框架,但是,当能力有限.我们没有继续下行.今天,我们正在采取的优势Java金痴迷,随即再次上调,另一项研究SSH.让我们先从SSH中间Hibernate说起. 或许你会问.为什 ...

  6. mysql_oracle_随机查询几条记录

    数据库的随机查询SQL 1. Oracle,随机查询20条 select * from ( select  *  from 表名 order by dbms_random.value ) where ...

  7. C#实现对mongoDB的简单增删查改

    首先添加所需要驱动包(可通过nuget获得) using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Builders; 一.设置配置 ...

  8. javascript中字符串常用方法总结

    字符串是javascript编程中不可或缺的元素,掌握字符串常用的方法也是我们学习过程中的必经之路,下面我们总结一些最常用的的字符串方法. string.charAt(postion) charAt方 ...

  9. POJ 1088 滑雪 (动规)

    滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 75664 Accepted: 28044 Description Mich ...

  10. BZOJ 2120 色彩数 暴力

    标题效果:给定一个序列,两种操作: 1.询[l,r]间隔多少个不同的号码 2.单点变化 n,m<=1W 树盖树?树董事长?因此不必! 暴力之前,这个问题2s,不想复杂!适当的水太! 离散化一下! ...