#贪心#洛谷 6927 [ICPC2016 WF]Swap Space

题目


分析

可以发现能将硬盘容量变大的优先,这种硬盘就是以格式化前的大小升序排序。

然后如果硬盘容量变小,那就是先填格式化后较大的硬盘(因为装完可以提供较大的空间)


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=1000011;
typedef long long lll;
lll rest,ans; int n,tot0,tot1;
struct rec{int x,y;}a[N],b[N];
int iut(){
	int ans=0; char c=getchar();
	while (!isdigit(c)) c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans;
}
bool cmp0(rec x,rec y){return x.x<y.x;}
bool cmp1(rec x,rec y){return x.x>y.x;}
int main(){
	n=iut();
	for (int i=1;i<=n;++i){
		int x=iut(),y=iut();
		if (x<y) a[++tot0]=(rec){x,y-x};
		    else b[++tot1]=(rec){y,x};
	}
	sort(a+1,a+1+tot0,cmp0);
	sort(b+1,b+1+tot1,cmp1);
	for (int i=1;i<=tot0;++i){
		if (rest<a[i].x) ans+=a[i].x-rest,rest=a[i].x;
		rest+=a[i].y;
	}
	for (int i=1;i<=tot1;++i)
	if (rest<b[i].y)
		ans+=b[i].y-rest,rest=b[i].x;
	else rest-=b[i].y-b[i].x;
	return !printf("%lld",ans);
}
posted @ 2022-03-12 20:47  lemondinosaur  阅读(46)  评论(0编辑  收藏  举报