对ci=1过敏,60pts
查看原帖
对ci=1过敏,60pts
1122046
osmium_dust楼主2025/1/23 14:45
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;

#include <vector>
#include <iostream>

long long tms=0,ans=0;
int n, m, x;
pair<int,int> station[100006];
int cara[100006];
int carb[100006];
int aweight[100006];
int bweight[100006];
bool bmp(int a, int b) { return a > b; }//1 1 3 2 1 1 3 6 8  26*10*2
bool q(pair<int, int> a, pair<int, int> b) { return a.first < b.first; }
int main() {
	cin >> n >> m >> x;
	for (int i = 0; i < n; i++)
		cin >> station[i].first >> station[i].second;
	for (int i = 0; i < m; i++) {
		cin >> cara[i] >> carb[i];
		if (cara[i] > carb[i])
			aweight[i] = cara[i] - carb[i];
		else
			bweight[i] = carb[i] - cara[i];
		tms += min(cara[i], carb[i]);
	}
	ans += tms * x; int a = 0, b = 0, af = 1, bf = 1;
	sort(aweight, aweight + m, bmp);
	sort(bweight, bweight + m, bmp);
	sort(station, station + n, q);
	for (int i = 0; i < n && af; i++) {
		for(; station[i].second ;station[i].second--)
			if (aweight[a])ans += aweight[a++] * station[i].first;
			else { af = 0; break; };
		if (aweight[a] == 0)break;
	}
	for (int i = n - 1; i >= 0 && bf; i--)
	{
		for (; station[i].second; station[i].second--) 
			if (bweight[b])ans += bweight[b++] * (x - station[i].first);
			else { bf = 0; break; }
	if (bweight[b] == 0)break;
}
	cout << 2 * ans;
}
2025/1/23 14:45
加载中...