bzoj4619 4619: [Wf2016]Swap Space
分析
首先不难想到我们要先处理容量变大的再处理容量变小的
对于第一种情况我们自然要选择x小的先格式化,因为这个样暂时存储所需空间较小,可以使得情况更优
而第二种情况y先考虑,因为这样对总空间的减少量小
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
struct node {
int x,y;
};
node a[1001000],b[1001000];
int cnt1,cnt2;
inline bool cmp1(const node x,const node y){
return x.x<y.x;
}
inline bool cmp2(const node x,const node y){
return x.y>y.y;
}
int main(){
int n,m,i,j,k;
scanf("%d",&n);
for(i=1;i<=n;i++){
int x,y;
scanf("%d%d",&x,&y);
if(x<y)a[++cnt1].x=x,a[cnt1].y=y;
else b[++cnt2].x=x,b[cnt2].y=y;
}
sort(a+1,a+cnt1+1,cmp1);
sort(b+1,b+cnt2+1,cmp2);
int Ans=0,now=0;
for(i=1;i<=cnt1;i++){
if(now<a[i].x){
Ans+=a[i].x-now;
now=a[i].x;
}
now+=a[i].y-a[i].x;
}
for(i=1;i<=cnt2;i++){
if(now<b[i].x){
Ans+=b[i].x-now;
now=b[i].x;
}
now+=b[i].y-b[i].x;
}
cout<<Ans;
return 0;
}