ABC G求hack
  • 板块学术版
  • 楼主Elysian_Realm
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/7/19 22:03
  • 上次更新2025/7/20 14:07:41
查看原帖
ABC G求hack
558933
Elysian_Realm楼主2025/7/19 22:03

rt,思路是选 AiNA_i \le N 并且 BiAi\dfrac{B_i}{A_i} 最大的操作,如果能选出,一直操作到 N<AiN < A_i 为止,重复以上步骤;如果不能选出,则喝完剩下 NN 瓶汽水,结束。 在atcoder上AC * 38 WA *2。
提交链接

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll N;
ll M,a[200000 + 5],b[200000 + 5];
int main () {
    ios::sync_with_stdio (false);
    cin >> N >> M;
    for (int i = 1;i <= M;i ++ ){
        cin >> a[i] >> b[i];
    }
    ll ans = 0;
    a[0] = 5000;
    while (1){
        int id = 0;
        for (int i = 1;i <= M;i ++) {
            if (a[i] > N) continue ;       
            if (b[i] * a[id] > a[i] * b[id])
                id = i;
            else if (b[i] * a[id] == a[i] * b[id] && a[i] < a[id]) 
                id = i;
        }
        if (id == 0 || N == 0) {
            ans += N;
            break ;
        }
        while (N >= a[id]) ans += N/a[id]*a[id],N = N%a[id]+N/a[id]*b[id];
    }
    cout << ans ;
    return 0;
}
2025/7/19 22:03
加载中...