社区讨论
求条
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 条回复,欢迎继续交流。
正在加载回复...