【NOIP2016普及组】复赛——海港
来源:互联网 发布:日本爱知时计 编辑:程序博客网 时间:2024/05/16 12:16
题目自己点,复制会︿( ̄︶ ̄)︿
呵呵,这道题之那啥,反正可以做,但你得选择,爆空间还是爆时间
……那还叫可以做……
好的,说说这道题的思路,爆搜队列嘛:
用一个结构体队列存每个人来的时间和他的国籍,用一个vis数组存每个人来的次数,是第一次来sum便加一。
然后从前面第一个人开始扔(原谅我用这个词,因为我找不到更好的词了)下船,直到第一个人与当前这艘船相差没超过1天即可,每扔一个人便vis[此人国籍]减一,当这个人来的次数为0时,sum减一。
就这样,既不爆时间也不爆空间,完美!
你们期待的代码:
#include<cstdio>#include<queue>using namespace std;struct p{ int pt,pn;//存每个人的时间和国籍};queue <p> ship;int n,vis[100005],sum;int main(){ scanf("%d",&n); while(n--) { int t,m,_n; scanf("%d%d",&t,&m);//船来的时间和人数 for(int i=1;i<=m;i++) { scanf("%d",&_n); p x; x.pt=t; x.pn=_n; ship.push(x);//将这个人存入队列(就是那艘邪恶的不能久待就把你扔下去的船) vis[_n]++; if(vis[_n]==1)//如果是第一次来 sum++; } while(1) { int a,b; a=ship.front().pt,b=ship.front().pn;//检查这个人 if(t-a<86400)//与当前间隔没超过一天 break; vis[b]--; if(vis[b]==0) sum--; ship.pop();//把这个人扔出去 } printf("%d\n",sum);//输出sum }}
By WZY
0 0
- 【NOIP2016普及组】复赛——海港
- C++——NOIP2016普及组 t3——海港
- NOIP2016普及组第三题——海港
- NOIP2016普及组第三题——海港
- NOIP2016普及组第三题——海港
- NOIP2016普及组第三题——海港
- 【原创】【NOIP2016普及组】海港
- noip2016普及组复赛
- NOIP2016普及组复赛第一题——买铅笔
- 【NOIP2016普及组】复赛——买铅笔
- 【NOIP2016普及组】复赛——回文日期
- 【NOIP2016普及组】复赛——魔法阵
- NOIP2016普及组T3海港解题报告
- [NOIP2016普及] 海港
- 【noip2016普及】海港
- noip2016普及组复赛总结
- noip2016普及组复赛题解
- NOIP2016普及组复赛第一题ACC程序加题解pascal———买铅笔
- 第七十三天学习笔记
- Maven学习 (一) 搭建Maven环境
- android之存储篇_SQLite数据库_让你彻底学会SQLite的使用
- iOS开发中的性能优化(下)
- bzoj 3851 2048 dp
- 【NOIP2016普及组】复赛——海港
- mllib逻辑回归LogisticRegressionWithLBFGS LogisticRegressionModel源码分析
- 开发者需要了解的WebKit
- 利用ROI再一个窗口中显示多个视频
- 关于socket通信bind()返回值错误:10049
- Html5本地存储和本地数据库
- bLue的字符串游戏
- 微信小程序-双击长按触发longtap事件时同时触发tap事件解决办法
- 自动时区和自动时间的实现