题解 P6767 【[BalticOI 2020/2014 Day0] Roses】

看到这题让我想到了小学的学生外出乘车选车。

分析:

定义 \(x\) , \(y\) 分别是第一家和第二家店一朵玫瑰花的价格,
先只买每朵价格比较小的一家店,记录为 \(ans\)

再计算两家店每束花的最小公倍数确定枚举次数,
然后枚举更换每束花后的价格来跟 \(ans\) 进行比较。更新 \(ans\)


光说不行,得上代码:

#include "cstdio"
#include "algorithm"
#include "iostream"
long long n, a1, a2, b1, b2, ans, go;
int main() {
    std::cin >> n >> a1 >> b1 >> a2 >> b2;
    long double x = b1 * 1.0 / a1, y = b2 * 1.0 / a2;
    if (x < y)
        std::swap(a1, a2), std::swap(b1, b2);//为了方便之后的枚举
    ans = (n + a2 - 1) / a2 * b2;
    go = a2 / std::__gcd(a1, a2);
    for (long long i = go; i >= 0; i--) {
        long long t = i * b1;
        if (n - i * a1 >= 0)
            t = t + (n - i * a1 + a2 - 1) / a2 * b2;
        ans = std::min(ans, t);
    }
    std::cout << ans;
    return 0;
}


\(\small{Valentine 是人赢。}\)

posted @ 2020-10-28 19:33  Nakiri_Ayame_suki  阅读(148)  评论(0编辑  收藏  举报