社区讨论

90求条,必关

P11960[GESP202503 五级] 平均分配参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mlnasexp
此快照首次捕获于
2026/02/15 13:21
4 天前
此快照最后确认于
2026/02/15 21:52
4 天前
查看原帖
Wa的两个点真的是太可癌了
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
struct th {
	int b,c,p;//p为b与c的差价
	bool choose;//0 -> 当前物品选b, 1 -> 当前物品选c
}a[N];
int n,cntb,cntc,ans;//cntb: b购买的物品数量 cntc: c购买的物品数量
bool cmp(th x,th y) {
	return x.p<y.p;
}
signed main() {
	cin>>n,n*=2;
	for (int i=1;i<=n;i++) {
		cin>>a[i].b;
	}
	for (int i=1;i<=n;i++) {
		cin>>a[i].c,
		cntb+=a[i].b>a[i].c,
		cntc+=a[i].c>a[i].b,
		a[i].choose=a[i].c>a[i].b,
		a[i].p=a[i].b-a[i].c;
	}
	if (cntb>cntc) {
		sort(a+1,a+1+n,cmp);
		for (int i=1;i<=n;i++) {
			if (cntb==cntc) {
				break;
			}
			if (a[i].choose==false) {
				a[i].choose=true;
				cntb--,cntc++;
			}
		}
	}
	else if (cntb<cntc){
		for (int i=1;i<=n;i++) {
			a[i].p=-a[i].p;
		}
		sort(a+1,a+1+n,cmp);
		for (int i=1;i<=n;i++) {
			if (cntb==cntc) {
				break;
			}
			if (a[i].choose==true) {
				a[i].choose=false;
				cntc--,cntb++;
			}
		}
	}
	for (int i=1;i<=n;i++) {
		ans+=(a[i].choose?a[i].c:a[i].b);
	}
	cout<<ans<<endl;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...