社区讨论

求条

P2608[ZJOI2010] 任务安排参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mlixaizo
此快照首次捕获于
2026/02/12 11:52
4 周前
此快照最后确认于
2026/02/12 14:32
4 周前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
#define L(i, a, b) for(int i = (a); i <= (b); i ++ )
#define R(i, a, b) for(int i = (a); i >= (b); i -- )
using i64 = long long;
const int maxn = 110;

int n, s1, s2;
int b[maxn], c[maxn];
struct node {
	int t1, t2, id;
} a[maxn];
 
bool cmp1(int x, int y) {return a[x].t1 < a[y].t1;}
bool cmp2(int x, int y) {return a[x].t2 < a[y].t2;}

void solve() {
	std::cin >> n >> s1 >> s2;
	L(i, 1, n) std::cin >> a[i].t1 >> a[i].t2, b[i] = i, c[i] = i;
	std::sort(b + 1, b + 1 + n, cmp1);
	std::sort(c + 1, c + 1 + n, cmp2);
	if(n == 1) {
		std::cout << a[1].t1 * s1 + a[1].t2 * s2 + std::min(a[1].t1 * s1, a[1].t2 * s2) << std::endl;
		return ;
	}
	if(b[1] != c[1]) {
		std::cout << a[b[1]].t1 * s1 + a[c[1]].t2 * s2 << std::endl;
		return ;
	}
	// L(i, 1, n) std::cout << b[i] << ' ';
	// std::cout << std::endl;
	// L(i, 1, n) std::cout << c[i] << ' ';
	// std::cout << std::endl;
	int ans1 = a[b[1]].t1 * s1 * 2 + std::max(0ll, s2 - a[b[1]].t1 * s1 / a[c[2]].t2) * a[c[1]].t2;
	if(a[b[1]].t1 * s1 > a[c[2]].t2 * s2) ans1 = a[b[1]].t1 * s1 + a[c[2]].t2 * s2; 
	int ans2 = a[c[1]].t2 * s2 * 2 + std::max(0ll, s1 - a[c[1]].t2 * s2 / a[b[2]].t1) * a[b[1]].t1;
	if(a[c[1]].t2 * s2 > a[b[2]].t1 * s1) ans2 = a[c[1]].t2 * s2 + a[b[2]].t1 * s1;
	int ans3 = a[b[1]].t1 * s1 * 2 + std::max(0ll, s2 - a[b[1]].t1 * s1 / a[c[2]].t2 - 1) * a[c[1]].t2 + (a[b[1]].t1 * s1 / a[c[2]].t2 + 1) * a[c[2]].t2 - a[b[1]].t1 * s1;
	int ans4 = a[c[1]].t2 * s2 * 2 + std::max(0ll, s1 - a[c[1]].t2 * s2 / a[b[2]].t1 - 1) * a[b[1]].t1 + (a[c[1]].t2 * s2 / a[b[2]].t1 + 1) * a[b[2]].t1 - a[c[1]].t2 * s2;
	std::cout << std::min({ans1, ans2, ans3, ans4}) << std::endl; 
}

signed main() {
	int tnum; std::cin >> tnum;
	while(tnum -- ) solve();
	return 0;
} 

回复

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

正在加载回复...