洛谷 P2058 海港 解题报告
P2058 海港
题目描述
小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第\(i\)艘到达的船,他记录了这艘船到达的时间\(t_i\)(单位:秒),船上的乘客数星\(k_i\),以及每名乘客的国籍\(x(i,1), x(i,2),…,x(i,k)\);。
小\(K\)统计了\(n\)艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化地讲,你需要计算\(n\)条信息。对于输出的第i条信息,你需要统计满足\(t_i-86400<t_p<= t_i\)的船只\(p\),在所有的\(x(p,j)\)中,总共有多少个不同的数。
输入输出格式
输入格式:
第一行输入一个正整数\(n\),表示小\(K\)统计了\(n\)艘船的信息。
接下来\(n\)行,每行描述一艘船的信息:前两个整数\(t_i\)和\(k_i\)分别表示这艘船到达海港的时间和船上的乘客数量,接下来\(k_i\)个整数\(x(i,j)\)表示船上乘客的国家。
保证输入的\(t_i\)是递增的,单位是秒;表示从小K第一次上班开始计时,这艘船在第\(t_i\)秒到达海港。
保证\(1<=n<=10^5\),\(\sum {k_i}<=3∗10^5\),\(1<=x(i,j)<=10^5\),\(10^9<=t_{i−1}<=ti<=10^9\)
输出格式:
输出\(n\)行,第\(i\)行输出一个整数表示第\(i\)艘船到达后的统计信息。
昨天听教练说,普及组的题目不怎么考算法,我的内心陡然一惊,那岂不是怎么暴力怎么来?
事实上并不是那么简单的,不考算法,就十分的考思想了,昨天被2016T4魔法阵吓到了于是打算先写写第三题。
今天读完题目,恩?洛谷高性能?怕不是要卡常?那直接暴力来吧。拿个桶把当前的存起来,把船的信息压进队列,交了以后

这个,看来事情并没有这么简单,发现人最多有三十万个,那直接存人和船的时间断点好了。

尴尬,,,
加一个上下界优化好了,每次遍历桶的时候只遍历到之前出现过得最大的人。

好家伙,不能这样搞。
又想了想,如果更新桶的时候某个种类由0变成了1就把答案加1,反之减1,不就刚好保证了300000*2吗
原来正确复杂度是\(O(\sum k)\),所以有时候想练练思想,不妨多做做没有什么算法的题目。
#include <cstdio>
#include <cstring>
int max(int x,int y){return x>y?x:y;}
const int N=100010;
int ans[N],n,t,k,tour[N*3],time[N][2],l=1,r,p=1,now;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&t,&k);
while(time[l][0]<=t-86400&&l<=r)
{
for(;p<=time[l][1];p++)
{
ans[tour[p]]--;
if(!ans[tour[p]]) now--;
}
l++;
}
for(int j=time[r][1]+1;j<=time[r][1]+k;j++)
{
scanf("%d",tour+j);
ans[tour[j]]++;
if(ans[tour[j]]==1)
now++;
}
time[++r][0]=t;
time[r][1]=time[r-1][1]+k;
printf("%d\n",now);
}
return 0;
}
2018.6.18
洛谷 P2058 海港 解题报告的更多相关文章
- 洛谷 P3956 棋盘 解题报告
P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...
- 洛谷 P1979 华容道 解题报告
P1979 华容道 题目描述 小\(B\)最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时 ...
- BZOJ 3545 / 洛谷 P4197 Peaks 解题报告
P4197 Peaks 题目描述 在\(\text{Bytemountains}\)有\(N\)座山峰,每座山峰有他的高度\(h_i\).有些山峰之间有双向道路相连,共\(M\)条路径,每条路径有一个 ...
- 虔诚的墓主人(BZOJ1227)(洛谷P2154)解题报告
题目描述 小W是一片新造公墓的管理人.公墓可以看成一块N×M的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. 当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地. ...
- 洛谷 P2058 海港 题解
P2058 海港 题目描述 小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况: ...
- (寒假集训)洛谷 P2058 海港
小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况:对于第i艘到达的船,他记录了 ...
- 洛谷P2058 海港
题目描述 小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况:对于第i艘到达的船 ...
- 洛谷 P2058 海港(模拟)
题目链接:https://www.luogu.com.cn/problem/P2058 这是一道用手写队列模拟的一道题,没有什么细节,只是注意因为数不会很大,所以直接用数作为数组下标即可,不用用map ...
- 洛谷 P2672 推销员 解题报告
P2672 推销员 题目描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第i家住户到入口的距离为 ...
随机推荐
- spring boot配置统一异常处理
基于@ControllerAdvice的统一异常处理 >.这里ServerException是我自定义的异常,和普通Exception分开处理 >.这里的RequestResult是我自定 ...
- 【UFUN开发板评测】小巧而不失精致,简单而不失内涵——uFun开发板开箱爆照
关于uFun学习板--"满满的爱和正能量" uFun是由@张进东 张工组织发起的一个开源的学习板,设计初衷是为了帮助学生更好的理解电子知识和开发技巧,同时又能对学生毕业找工作有很明 ...
- 【福利】送Spark大数据平台视频学习资料
没有套路真的是送!! 大家都知道,大数据行业spark很重要,那话我就不多说了,贴心的大叔给你找了份spark的资料. 多啰嗦两句,一个好的程序猿的基本素养是学习能力和自驱力.视频给了你们,能不能 ...
- iOS开发简记(3):tips提示
我有一个需求:在点击或长按某个按钮时,需要显示提示,包括简单的文字提示,还有复杂一点的图片甚至是动态图的提示(可能还要加上文字). (1)文字tips 使用之前介绍的qmuikit里面的QMUITip ...
- PHP中报500错误时如何查看错误信息
在执行代码中加入下面两行代码即可 ini_set("display_errors","On"); error_reporting(E_ALL);
- [北航矩阵理论A]课程笔记
[北航矩阵理论A]课程笔记 一.特征值 特征根相关: 设任一方阵 \(A = (a_{ij})_{n\times n} \in C^{n\times n}\) 特征多项式 \(T(\lambda)=| ...
- 《Linux内核设计与实现》第五章学习笔记
<Linux内核设计与实现>第五章学习笔记 姓名:王玮怡 学号:20135116 一.与内核通信 在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核 ...
- Opentsdb分布式安装
Opentsdb分布式安装 --李琦 1.下载文件上传到虚拟机 -rw-r--r--. 1 root root 76793860 Apr 27 10:56 opentsdb-2.2.0.tar ...
- 我的Android之路——底部菜单栏的实现
底部菜单栏的实现 底部菜单栏两种实现方法:ViewPager:可滑动的界面:Fragment:固定的界面. 首先,页面布局,在除去顶部toolbar之后,将主界面分为两部分,一部分为界面显示区,另一部 ...
- Junit测试用例
一.题目简介 返回一个给定整数参数的绝对值. 二.源码的github链接 https://github.com/liyan941016/test/blob/master/FileTest.java h ...