zoukankan      html  css  js  c++  java
  • 【AtCoder Regular Contest 076 F】Exhausted (贪心)

    Description

    机房里有M台电脑排成一排,第i台电脑的坐标是正整数i。

    现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要求区间。第i个OIer希望自己的电脑的位置≤Li或≥Ri。自然,一台电脑只能给一个OIer使用,不然会发生友♂好的跤♂流

    显然,有可能这个机房无法满足所有OIer的需求。这时老师就会在机房中增加电脑。增加的电脑可以位于任意的实数位置。你需要帮老师计算一下,老师最少加几台电脑,才可以满足所有OIer的需求?

    Input

    第一行两个整数N,M

    接下来N行,每行两个整数Li,Ri

    Output

    输出最小需要增加的电脑数量

    题解

    第一眼贪心,结果没过样例,就暴力打了个网络流。(结果我那个WA的贪心竟然比网络流高?!)

    其实是我少考虑了。首先是如果是只有 (L) 限制或是 (R) 限制,那么很明显,先排序一遍,从两边开始往中间扫,能塞就塞,塞不了就加点。

    但是,有了两个限制?我之前是按 (L) 作为第一关键字,(R) 作为第二关键字排序,但显然 (R) 不单调,直接贪心显然WA。

    我们再考虑一下,如果左边塞不下了,那么无论如何,都要有一个人坐到右边,那么我们可以吧左边有位置的一个人踢出来,让他坐在右边。那我们肯定是吧 (R) 小的踢出来(容错率高)。

    那就好办了,我们往左边塞的时候,坐不下就把 (R) 最小的踢掉,可以用小根堆维护。把左边塞完之后,再把没座位的,以同样的方法往右边塞,实在没办法就只能补了。

    CODE:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    using namespace std;
    
    int n,m,ans=0,tmp[200005];
    struct Student{
    	int l,r;
    	bool operator<(const Student &b)const{
    		return l!=b.l?l<b.l:r>b.r;
    	}
    }s[200005];
    priority_queue<int,vector<int>,greater<int> > q;
    
    int main(){
    //	freopen("data.in","r",stdin);
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++)
    		scanf("%d%d",&s[i].l,&s[i].r);
    	sort(s+1,s+n+1);
    	int h=1,t=m;
    	for(int i=1;i<=n;i++){
    		q.push(s[i].r);
    		if(h<=t&&h<=s[i].l)h++;
    		else{
    			tmp[++tmp[0]]=q.top();
    			q.pop();
    		}
    	}
    	sort(tmp+1,tmp+tmp[0]+1);
    	for(int i=tmp[0];i>=1;i--){
    		if(h<=t&&tmp[i]<=t)t--;
    		else ans++;
    	}
    	printf("%d",ans);
    }
    
  • 相关阅读:
    JQuery常用函数方法全集
    从零开始学习jQuery (三) 管理jQuery包装集
    Jquery选择器总结
    oracle常用函数总结
    普通Java类获取Spring的Bean的方法
    AtCoder Beginner Contest 173 A
    HDU 5974 A Simple Math Problem
    Codeforces Round #655 (Div. 2) B. Omkar and Last Class of Math
    Codeforces Round #655 (Div. 2) A. Omkar and Completion
    SWPU信息学院团体程序设计竞赛题解
  • 原文地址:https://www.cnblogs.com/ezoiLZH/p/9492929.html
Copyright © 2011-2022 走看看