长乐集训2012.7.11 happy(指针技巧的运用)
题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(指针技巧的运用)的更多相关文章
- C++11智能指针之std::unique_ptr
C++11智能指针之std::unique_ptr uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...
- P2260 [清华集训2012]模积和 【整除分块】
一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...
- P2260 [清华集训2012]模积和
P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...
- 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), ...
- 「长乐集训 2017 Day10」划分序列 (二分 dp)
「长乐集训 2017 Day10」划分序列 题目描述 给定一个长度为 n nn 的序列 Ai A_iAi,现在要求把这个序列分成恰好 K KK 段,(每一段是一个连续子序列,且每个元素恰好属于一 ...
- 如何规范移动应用交互设计?UI/UX设计师须知的11个小技巧
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 十年前,手机的使用只是为了沟通. 而近几年,情况发生了很大变化,我们很难找到不使用手机的人.手机在极 ...
- C++11——智能指针
1. 介绍 一般一个程序在内存中可以大体划分为三部分——静态内存(局部的static对象.类static数据成员以及所有定义在函数或者类之外的变量).栈内存(保存和定义在函数或者类内部的变量)和动态内 ...
- 【C++11新特性】 C++11智能指针之weak_ptr
如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr.在学习weak_ptr之前最好对shared_ptr有所了解.如果你还不知道shared_ptr是何物,可以看看我的另 ...
- 详解C++11智能指针
前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用. C++11智能指针介 ...
随机推荐
- BZOJ 1801 AHOI2009 中国象棋 递归
标题效果:给定一个棋盘.放置一些枪.它需要随机两支枪不能互相攻击,评估的数目p模值 首先,两炮不攻击对方自由地等同于一条线最多可有只有两个枪 直形压力DP话是50分 考虑到每个列是等效 然后我们就可以 ...
- Android学习----异常(2):Please ensure that adb is correctly located at ' ... '
打开任务管理器,在后台进程中找到 kadb,结束这个进程,重新启动eclipse.
- java_Eclipse自动生成作者、日期注释等功能设置_导入 xml方式
常规方式 随便百度个 类比 http://blog.sina.com.cn/s/blog_4080505a0101guoh.html 这里主要介绍配好后,导出,xml,迁移环境时 导入 comment ...
- PHP_零基础学php_2变量、预定义变量、预定义常量、表达式、运算符、程序控制流程
1.变量 PHP中使用$后跟变量名表示一个变量,变量名区分大小写. 变量的数据类型 整数类型 浮点类型 字符串类型 布尔类型 数组类型 对象 <html> <head> < ...
- C#5.0新特性
C#5.0新特性 C#5.0最大的新特性,莫过于Async和Parallel. 以往我们为了让用户界面保持相应,我们可以直接使用异步委托或是System.Threading命名空间中的成员,但Syst ...
- Cocos2d-xvision3.0加载失败,和,Vs2012环境搭建
1.安装好VS2012,下载Cocos2d-x3.0 双击击win32 sln运行VS2012 如果加载失败点击程序运行,输入devenv.exe /resetuserdata 回车,然后再进入VS, ...
- 《全体育·瑜伽》
今天出去吃饭,本来是想买<印象>创刊号的,结果没找着,看到一本<瑜伽>创刊号.作为一个伪瑜伽爱好者,我掏了20元大洋买了一本,你知道如今的时尚杂志都非常坏,用塑料膜封着,不能翻 ...
- Django----模板
为了将html页面和python代码分离开来,有必要介绍一下模板的作用,Django中自带很多模板. 以下一个html模板文件: <html> <head><title& ...
- mvc中动态给一个Model类的属性设置验证
原文:mvc中动态给一个Model类的属性设置验证 在mvc中有自带的验证机制,比如如果某个字段的类型是数字或者日期,那么用户在输入汉字或者英文字符时,那么编译器会自动验证并提示用户格式不正确,不过这 ...
- sax(用于处理XML事件驱动的推模型)解析例子
SAX解析 Java程序如下: import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; impor ...