#贪心#洛谷 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);
}