5.6水题记录

BZOJ 1029

确实是水题,由于人弱想了半天.

这题我以前好像做到过T^T...

原来贪心就可以了.据gty说,贪心策略:

能加则加

不能加尽量省出时间来.

感觉好奇葩,不知道为什么是对的...感觉正确性并不显然...先这么写了.

#include <cstdio>
#include <ext/pb_ds/priority_queue.hpp>
#include <algorithm>
__gnu_pbds::priority_queue<int,std::less<int>> q;
int n,m,i,j,k;
inline int read(){//hzwer read
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
struct Q{
	int e,t;
} s[200000];
bool c(const Q& a,const Q& b){
	return a.e<b.e;
}
int main(){
	n=read();
	for(i=0;i<n;++i) s[i].t=read(),s[i].e=read();
	std::sort(s,s+n,c);
	for(i=0;i<n;++i){
		if(j+s[i].t<=s[i].e){
			++k;
			j+=s[i].t;
			q.push(s[i].t);
		}else{
			m=q.top();
			if(m>s[i].t){
				q.pop();
				q.push(s[i].t);
				j=j-m+s[i].t;
			}
		}
	}
	printf("%d\n",k);
	return 0;
}

STL玩玩就水过了.

posted @ 2015-05-07 15:31  zball  阅读(92)  评论(0编辑  收藏  举报