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 个时刻 ...
随机推荐
- IGMP技术总结
转载自:IGMP技术总结 本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一.小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! 1. IGMP ...
- 2017-2018-2 20165202 实验三《敏捷开发与XP实践》实验报告
一.实验报告封面 二.实验内容 XP基础 XP核心实践 相关工具 三.实验步骤 (一)格式化代码 实验要求: 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化 ...
- flash cc新建swc文件
- C#项目中怎样创建和使用类和类库
创建一个类库项目在“文件”菜单上,选择“新建项目”. 在“新建项目”对话框的“模板”窗格中,单击“类库”. 在“名称”框中键入 Persons,再单击“确定”. 把“添加新解决方案”勾选掉,选择“添入 ...
- 【跟着stackoverflow学Pandas】Select rows from a DataFrame based on values in a column -pandas 筛选
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- IOS开发 清空数组正确方法
NSArray以及NSMutableArray 在Objc中的两种数组(不可变数组和可变数组), 在日常开发中,经常会遇到需要清空数组的情况,很多人下意识的会想到nil这个方法,这里是不提倡的.因为如 ...
- HDU - 6437:Videos (裸的费用流)
...懒得说什么了 #include<bits/stdc++.h> using namespace std; ; <<;int To[maxn],Laxt[maxn],Next ...
- 让 ScrollViewer 的滚动带上动画
WPF 的 ScrollViewer 没有水平滚动和垂直滚动的属性 HorizontalScrollOffset VerticalScrollOffset,只有水平滚动和垂直滚动的方法 ScrollT ...
- koa2 中间件里面的next到底是什么
koa2短小精悍,女人不爱男人爱. 之前一只有用koa写一点小程序,自认为还吼吼哈,知道有一天某人问我,你说一下 koa或者express中间件的实现原理.然后我就支支吾吾,好久吃饭都不香. 那么了解 ...
- Hadoop1.x安装配置文件及参数说明
一.常用文件及参数说明Core-site.xml 配置Common组件的属性 hdfs-site.xml 配置hdfs参数,比如备份数目,镜像存放路径 Mapred-sit ...