求救
查看原帖
求救
381471
欧阳逸owen楼主2025/7/18 19:08
#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>a2.num;
}
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+m].num;
		c[i].id=i;
		c[i].flag=0;
		c[i].num2=c[i+m].num;
		c[i+m].id=i;
		c[i+m].flag=1;
		c[i+m].num2=c[i].num;
	}
	sort(a+1,a+1+n,cmp);
	sort(c+1,c+1+2*m,cmp2);
	ll l=1,r=n;
	ll ans=0;
	for(int i=1;i<=2*m;i++){
		if(vis[c[i].id]) continue ;
		vis[c[i].id]=1;
		if(c[i].flag==0){
			ans+=(c[i].num*a[l].p+c[i].num2*abs(a[l].p-x));
			a[l].c--;
			if(a[l].c==0) l++;
		}
		else{
			ans+=(c[i].num2*a[r].p+c[i].num*abs(a[r].p-x));
			a[r].c--;
			if(a[r].c==0) r--;
		}
	}
	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

*/ 

思路和正解一样啊,为啥不行

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