社区讨论
关于此题与一些随机的爆零求助
P6767[BalticOI 2012/2020] 玫瑰 (Day0)参与者 8已保存回复 30
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 30 条
- 当前快照
- 1 份
- 快照标识符
- @lo1wzor1
- 此快照首次捕获于
- 2023/10/23 04:21 2 年前
- 此快照最后确认于
- 2023/11/03 04:48 2 年前
@12345678hzx
按照这位大佬的思路写的 QwQ。
和第一篇题解对拍了 组数据都没出错。
后来要回家了,电脑没关直接挂机拍 组数据,早上来看电脑黑屏了呜呜呜。
CPP#include <bits/stdc++.h>
using namespace std;
long long n, a, b, c, d;
long long ans = 0;
inline long long gcd(long long a, long long b) {
return b ? gcd(b, a % b) : a;
}
int main() {
scanf("%lld%lld%lld%lld%lld", &n, &a, &b, &c, &d);
if (a * d < b * c) swap(a, c), swap(b, d);
long long l = a / gcd(a, c) * c, price = (l / a) * b;
ans = (n / l) * price;
if (n % l == 0) {
printf("%lld\n", ans);
return 0;
}
long long lst = n - (n / l) * l, x = 0;
long long Min = 1e18;
while (x * a <= lst) {
long long qwq = (lst - x * a) / c + 1;
if ((lst - x * a) % c == 0) qwq--;
long long res = qwq * d + x * b;
// cout << '\t' << ceil((lst - x * a) * 1.000 / c) << endl;
// cout << x << ' ' << res << endl;
Min = min(Min, res);
x++;
}
long long res = (lst / a + 1) * b;
if (lst % a == 0) res = (lst / a) * b;
Min = min(Min, res);
// cout << Min << endl;
printf("%lld\n", ans + Min);
return 0;
}
回复
共 30 条回复,欢迎继续交流。
正在加载回复...