Codeforces-20152016-northwestern-european-regional-contest-nwerc-A题
一、题目
二、题意
(1)一开始理解成:它最多需要开多少台电脑。同时,我又有个疑问,既然是最多需要开多少台,那不变成了总共有几个人开几台是最大的结果。然后,WA了无数发。直到比赛结束。。。。。。其实说到底还是不明白题目意思。
(2)真正的意思是:这个人最多可以节省多少台不开。也就是说,能共同用一台就共同用一台,没办法的情况下才去开新机子。问最多可以有多少台不开。也就是人数n - 最少需要开多少台机子。
三、思路
用闭区间记录输入数据,按区间左边(人来的时刻)从小到大排序(如果左边相同,则按右边从小到大排序)。用优先队列存储待机(没锁的机子)的区间段(从使用者下机到机器自动锁这一闭区间),区间左边越靠前的,优先级越高(为什么按左边?因为这些待机区间段长度相等)。很好理解嘛,如果不先使用那些快要锁屏的机子,那肯定会浪费一些快要锁屏的机子,而要开更多的新机子,不划算。就像吃东西一样。先把快过期的东西吃掉,再吃保质期更长的。然后遍历所有区间,对于某个上机者,先在队列中找找有没有在待机的空机子,如果没有,没办法,开一台新的。有的话,看看最早过期的那个机器的开始时刻,如果比当前上机者的上机时间晚,说明这个人来早了,也没办法,必须开台新的。另外,如果队列首元素的结束时间比当前上机者的上机时间要早,说明这个人来晚了,那就把队首元素移除掉,然后看看下一个队首元素如何。如果队首元素的起始时间比上机者的上机时间早,说明有剩余机子(为什么不用同时判断上机者的上机时间是不是比队首元素的结束时间小或等于?因为如果大于,在前一个判断中就过滤掉了,能走到这步判断的队首元素都是满足上机者的上机时间小于等于队首元素的结束时间的),这个人就坐过去,结果计数器加1。当前,只要有人上机,那就往队列中加入当前这个人的下机时刻到机器自动锁时刻的区间。
另外,注意一点优先队列的用法,这个比较绕,到底怎么才是优先,需要搞明白。
四、源代码
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<cctype> #include<algorithm> #include<utility> #include<vector> #include<set> #include<map> #include<stack> #include<queue> using namespace std; typedef long long LL; typedef __int64 I64; ; I64 n, m; typedef struct Foo { I64 s, t; Foo() { s = , t = ; } Foo(I64 _s, I64 _t) { s = _s, t = _t; } bool operator < (Foo f) const { if(s == s)return t > f.t; else return s > f.s; } } Interval; Interval itv[MAXN]; priority_queue<Interval> que; bool cmp(Interval i1, Interval i2) { if(i1.s == i2.s)return i1.t < i2.t; else return i1.s < i2.s; } void solve() { sort(itv + , itv + n + , cmp); while(!que.empty())que.pop(); ; ; i <= n; ++i) { while(!que.empty() && itv[i].s > que.top().t)que.pop(); if(!que.empty() && itv[i].s >= que.top().s) { saved++; que.pop(); } que.push(Interval(itv[i].t, itv[i].t + m)); } printf("%d\n", saved); } int main() { #ifndef ONLINE_JUDGE freopen("Ainput.txt", "r", stdin); freopen("Aoutput2.txt", "w", stdout); #endif // ONLINE_JUDGE I64 a, b; while(~scanf("%I64d%I64d", &n, &m)) { ; i <= n; ++i) { scanf("%I64d%I64d", &a, &b); itv[i].s = a, itv[i].t = a + b; } solve(); } ; }
Codeforces-20152016-northwestern-european-regional-contest-nwerc-A题的更多相关文章
- codeforces Gym - 101485 D Debugging (2015-2016 Northwestern European Regional Contest (NWERC 2015))
题目描述: 点击打开链接 这题题意其实很不好理解,你有一个n行的程序,现在程序运行了r时间之后停止了运行,证明此处有一个bug,现在你需要在程序中加printf来调试找到bug所在的位置,你每次加一个 ...
- 2015-2016 Northwestern European Regional Contest (NWERC 2015)
训练时间:2019-04-05 一场读错三个题,队友恨不得手刃了我这个坑B. A I J 简单,不写了. C - Cleaning Pipes (Gym - 101485C) 对于有公共点的管道建边, ...
- 2017-2018 Northwestern European Regional Contest (NWERC 2017)
A. Ascending Photo 贪心增广. #include<bits/stdc++.h> using namespace std; const int MAXN = 1000000 ...
- 2012-2013 Northwestern European Regional Contest (NWERC 2012)
B - Beer Pressure \(dp(t, p_1, p_2, p_3, p_4)\)表示总人数为\(t\),\(p_i\)对应酒吧投票人数的概率. 使用滚动数组优化掉一维空间. 总的时间复杂 ...
- Northwestern European Regional Contest 2016 NWERC ,F题Free Weights(优先队列+Map标记+模拟)
传送门: Vjudge:https://vjudge.net/problem/Gym-101170F CF: http://codeforces.com/gym/101170 The city of ...
- Northwestern European Regional Contest 2017-I题- Installing Apps题解
一.题意 有一个手机,容量为$C$,网上有$N$个app,每个app有个安装包大小$d_i$,有个安装后的占用空间大小$s_i$,安装app是瞬间完成的,即app的占用空间可以瞬间由$d_i$变成$s ...
- Northwestern European Regional Contest 2014 Gym - 101482
Gym 101482C Cent Savings 简单的dp #include<bits/stdc++.h> #define inf 0x3f3f3f3f #define inf64 0x ...
- 2006 ACM Northwestern European Programming Contest C题(二分求最大)
My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a numberN o ...
- ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbilisi, November 24, 2010
ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbil ...
- 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)
2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A 题意:有 n 个时刻 ...
随机推荐
- Flask框架中特有的变量/函数及上下文
模板中特有的变量和函数 你可以在自己的模板中访问一些 Flask 默认内置的函数和对象 config 你可以从模板中直接访问Flask当前的config对象: {{config.SQLALCHEMY_ ...
- TF随笔-7
求平均值的函数 reduce_mean axis为1表示求行 axis为0表示求列 >>> xxx=tf.constant([[1., 10.],[3.,30.]])>> ...
- VMWare的共享文件的安装指南
引言:笔者这几天基于CentOS 7的精简版按照了一个虚拟机,悲催的是没有图形界面,但是非常需要共享文件的工作,在宿主机以及虚拟机之间实现文件共享,本文将描述如何实现此操作. VMWare菜单按照VM ...
- 《机器学习》第三章——LDA
import numpy as np x=np.zeros((2,17)) y=np.zeros((1,17)) def dataload(filename): f=open(filename) ar ...
- Python IDLE 的使用与调试
Python IDLE 是Python 安装包自带的集成开发环境.IDLE集成了Python 解释器.编辑器与调试器.适用于初学者了解Python 语法知识.1.使用 Python IDLE 编辑Py ...
- ubuntu16.04 LTS grafana安装与启动
1.首先从官网上下载相应的包,网址为:http://grafana.org/download 2.安装 cd Downloads sudo dpkg -i grafana_4.1.2-14869897 ...
- Unity的 NavMeshObstacle 的使用详解
这个组件放在场景中的导航网格上,可以阻挡NavMeshAgent的移动.以Unity4.3.4为例. NavMeshObstacle 分为两种模式,一种是普通模式,通过 ...
- CF1117C Magic Ship
CF1117C Magic Ship 考虑到答案具单调性(若第 \(i\) 天能到达目的点,第 \(i+1\) 天只需向风向相反的方向航行),可以二分答案. 现在要考虑给出一个天数 \(m\) ,问 ...
- 《DSP using MATLAB》示例Example7.10
代码: ws1 = 0.2*pi; wp1 = 0.35*pi; wp2 = 0.65*pi; ws2 = 0.8*pi; As = 60; tr_width = min((wp1-ws1), (ws ...
- Django的MultipleChoiceField处理小技巧
1.如果遇到多选择的,在收到数据时一般需要做处理 tag_id = fields.MultipleChoiceField( choices=[], widget=widgets.CheckboxSel ...