P6927 [ICPC2016 WF] Swap Space

P6927 [ICPC2016 WF] Swap Space

思路

首先可以发现确定了格式化硬盘的顺序我们可以通过线性时间复杂度算出额外硬盘的空间。然后我们考虑贪心策略:当 \(b_i\ge a_i\) 时我们要按照 \(b_i\) 的大小降序排序,因为这样可以尽量产生更多的空间供第二种使用;当 \(b_i<a_i\) 时,则需要以 \(a_i\) 升序排序,尽量不要让所需 \(a_i\) 大于当前的 \(ans\) 。显然先处理第一种更好,所以开始愉快的写代码吧!

ACcode

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N=1e6+1;
int n,t,a[N],b[N],id[N],ans,sum;

bool cmp(int x,int y){
	int ax=a[x],bx=b[x],cx=b[x]-a[x],ay=a[y],by=b[y],cy=b[y]-a[y];
	return ((cx>=0)^(cy>=0)?cx>cy:(cx>=0?ax<ay:bx>by));
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
//	freop();
//↑以上为初始化↑
//------------------------------
	cin >> n;
	for(int i = 1;i<=n;++i) cin >> a[i] >> b[i],id[i]=i;
	sort(id+1,id+n+1,cmp);
	for(int i = 1;i<=n;++i)	ans=max(ans,a[id[i]]-sum),sum+=b[id[i]]-a[id[i]];
	cout << ans << endl;
	return 0;
}
posted @ 2026-10-21 21:28  elon_giao  阅读(3)  评论(0)    收藏  举报