1 条题解

  • 0
    @ 2025-11-8 20:43:33
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1e6, mod = 1e9+7, inf = 1e18 + 5;
    
    void solve() {
        int n,m,k;
        cin >> n >> k >> m;
        int s = n / k; // k的倍数的个数
        int les = n - s; // 不是k的倍数的个数
        int ans = 0;
        if(m <= les){ // 若可以改变的个数m <= 非k的倍数的个数
            ans += m; // 将 m 个 非k倍数的数 改为k, 对答案贡献 + m 
            ans += (s + 1) / 2; // 原本是k的倍数的数,相邻两个数对贡献 + 1
            //(s+1) / 2 : (s+1) 
        }
        else{ // 可以改变的个数m > 非k的倍数的个数
            ans += les; // 将非k的倍数的数全变为k,对答案贡献 + les
            m -= les; // 还能改变的个数 m = m - les
            s -= m; // k的倍数的个数有s个,将改变其中的m个变成k
            ans += m; // 贡献 + m
            ans += (s+1)/2; // 相邻两个数对贡献 + 1
        }
        cout << ans << endl;
    }
    signed main() {
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        int T = 1;
        cin >> T;
        while (T--)
            solve();
        return 0;
    }
    
    • 1

    你以为ta在拖妥协,其实ta在默默离开

    信息

    ID
    1192
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    49
    已通过
    16
    上传者