关于此题与一些随机的爆零求助
查看原帖
关于此题与一些随机的爆零求助
565040
Conan15楼主2023/8/10 09:25

@12345678hzx

按照这位大佬的思路写的 QwQ。

和第一篇题解对拍了 10610^6 组数据都没出错。

后来要回家了,电脑没关直接挂机拍 10810^8 组数据,早上来看电脑黑屏了呜呜呜。

#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;
}
2023/8/10 09:25
加载中...