一、题目

二、题意

  (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题的更多相关文章

  1. codeforces Gym - 101485 D Debugging (2015-2016 Northwestern European Regional Contest (NWERC 2015))

    题目描述: 点击打开链接 这题题意其实很不好理解,你有一个n行的程序,现在程序运行了r时间之后停止了运行,证明此处有一个bug,现在你需要在程序中加printf来调试找到bug所在的位置,你每次加一个 ...

  2. 2015-2016 Northwestern European Regional Contest (NWERC 2015)

    训练时间:2019-04-05 一场读错三个题,队友恨不得手刃了我这个坑B. A I J 简单,不写了. C - Cleaning Pipes (Gym - 101485C) 对于有公共点的管道建边, ...

  3. 2017-2018 Northwestern European Regional Contest (NWERC 2017)

    A. Ascending Photo 贪心增广. #include<bits/stdc++.h> using namespace std; const int MAXN = 1000000 ...

  4. 2012-2013 Northwestern European Regional Contest (NWERC 2012)

    B - Beer Pressure \(dp(t, p_1, p_2, p_3, p_4)\)表示总人数为\(t\),\(p_i\)对应酒吧投票人数的概率. 使用滚动数组优化掉一维空间. 总的时间复杂 ...

  5. 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 ...

  6. Northwestern European Regional Contest 2017-I题- Installing Apps题解

    一.题意 有一个手机,容量为$C$,网上有$N$个app,每个app有个安装包大小$d_i$,有个安装后的占用空间大小$s_i$,安装app是瞬间完成的,即app的占用空间可以瞬间由$d_i$变成$s ...

  7. Northwestern European Regional Contest 2014 Gym - 101482

    Gym 101482C Cent Savings 简单的dp #include<bits/stdc++.h> #define inf 0x3f3f3f3f #define inf64 0x ...

  8. 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 ...

  9. 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 ...

  10. 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 个时刻 ...

随机推荐

  1. vue.js 源代码学习笔记 ----- 工具方法 props

    /* @flow */ import { hasOwn, isObject, isPlainObject, capitalize, hyphenate } from 'shared/util' imp ...

  2. Android 开发技术选型(博客,新闻,阅读类)

    前言 最开始学习写应用的时候,发现类聚合数据这个平台可以提供一些免费数据接口,于是写了个人的第一个应用-– JuheNews,当时的知识储备稍显粗糙,虽然现在的知识也不咋滴,但是相对之前而言还是有些进 ...

  3. Js/Jquery获取网页屏幕可见区域高度

    获取浏览器窗口的可视区域高度和宽度,滚动条高度有需要的朋友可参考一下. 1 document.body.clientWidth ==> BODY对象宽度 2 document.body.clie ...

  4. linux中的网络基础

    ifconfig -a 查看所有网口ifconfig eth 查看具体网口 ifup ethoifdown etho 网卡配置文件/etc/sysconfig/networkk-scripts/ifc ...

  5. phpcms v9取消验证码

    phpcms/modules/admin/index.php// $code = isset($_POST['code']) && trim($_POST['code']) ? tri ...

  6. notes on Art Pipeline

    Do not add complex clothes/facial hair to a model for Mixamo to auto rig, it will cause confusion. A ...

  7. MySQL INFORMATION_SCHEMA 使用

    --查看创建的索引的CARDINALITY比率 --通常cardinality达到表数据的10%左右建索引会有意义--如果是一个组合索引,索引第一位的cardinality表示第一个列的cardina ...

  8. Break point and VC bound

    Restriction of Break Point e.g: k=2 说明在所有的dichotomy中,任意两个点不能被shatter(shatter就是能够出现所有种排列组合),即不能出现这两个点 ...

  9. AX内部公司

    <object width="450" height="500" align="middle" id="reader&quo ...

  10. BZOJ4832: [Lydsy1704月赛]抵制克苏恩(记忆化&期望)

    Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q 同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 ...