P11376求调
查看原帖
P11376求调
381471
欧阳逸owen楼主2025/7/18 19:19
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long 
const ll N=1e6+10;
ll n,m,x;
struct node{
	ll p,c;
}a[N];
bool cmp(node a1,node a2){
	return a1.p<a2.p;
}
struct car{
	ll num,id,flag,num2;
}c[N];
bool cmp2(car a1,car a2){
	return a1.num-a1.num2>a2.num-a2.num2;
}
bool vis[N];
void solve(){
	cin >> n >> m >> x;
	for(int i=1;i<=n;i++){
		cin >> a[i].p >> a[i].c;
	}
	for(int i=1;i<=m;i++){
		cin >> c[i].num >> c[i].num2;
	}
	sort(a+1,a+1+n,cmp);
	sort(c+1,c+1+m,cmp2);
	ll ans=0;
	for(int i=1,j=1;c[i].num>=c[i].num2;i++){
		ans+=(c[i].num*a[j].p+c[i].num2*(x-a[j].p));
		a[j].c--;
		if(a[j].c==0) j++;
	}
	for(int i=m,j=n;c[i].num<c[i].num2;i--){
		ans+=(c[i].num*a[j].p+c[i].num2*(x-a[j].p));
		a[j].c--;
		if(a[j].c==0) j--;
	}
	cout << 2*ans << endl;
	return ;
}
ll T=1;
signed main(){
//    cin >> T;
    while(T--) solve();
    return 0;
}

/*

3 4 10

1 1
2 1
8 3

5 3
7 2
9 0
1 10000

*/ 

0分,思路感觉和正解一样

2025/7/18 19:19
加载中...