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 个时刻 ...
随机推荐
- node csrf 防御 待续
csrf 防御 token 与 ajax 主要是在cookie添加随机数, 因为攻击者 无法访问第三方网站的 cookie, 加上httponly, 即使是xss也无法访问了 也可以在页面上嵌入一个 ...
- css实现加载中的效果
那天闲着,学习了一下样式效果,自己实现了一个简单的加载中的效果 废话不多说,开始吧!! 一.实现一个圆环 要实现圆环,首先我们需要知道盒模型里面border的本质,先来看一个效果吧 从上面 ...
- nginx and node.js配合使用 helloworld
nginx是最好的反向代理服务器. Node.js是... 好吧 ,不介绍了,猛击这里 现在小介绍下怎么用nginx和node.js配合使用. 先写个helloworld.js var http = ...
- Swift 发送邮件和发短信
// MARK: - Action // MARK: compose mail 发送邮件 @IBAction func composeMail(sender: AnyObject) { // 判断能否 ...
- Visual Studio Community 版本过期
/********************************************************************* * Visual Studio Community 版本过 ...
- I.MX6 I2C DS1337 disable square-wave output
linux I2C DS1337 disable square-wave output \\\\\\\\\\\-*- 目录 -*-////////// | 一.DS1337访问寄存器说明: | 二.c ...
- JAXP使用Stax API时格式化输出XML 2
之前实现的一个版本:http://www.cnblogs.com/lyhtbc/p/jaxp-pretty-format-validate-validation-stax-stax2.html 这个版 ...
- BZOJ2216 Poi2011 Lightning Conductor 【决策单调性优化DP】
Description 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt( ...
- 轻量级KVO[译]
在这篇文章中,我会实现一个自己用的简单KVO类,我认为KVO非常棒,然而对于我大部分的使用场景来说,有这两个问题: 1. 我不喜欢在observeValueForKeyPath:ofObjec ...
- Http中Get/Post请求区别
Http中Get/Post请求区别 (1)get是从服务器上获取数据,post是向服务器传送数据. (1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到:POST方式,数据放置 ...