1 条题解

  • 0
    @ 2026-5-3 20:42:33

    上传RAM 题解


    一、题目回顾

    需要上传 nn GB 的 RAM。每秒可以上传 0011 GB。但在任意连续的 kk 秒内,最多只能上传总共 11 GB。求上传 nn GB 所需的最短秒数。

    数据范围:tt 组测试,1t1041 \le t \le 10^41n,k1001 \le n, k \le 100


    二、思路分析

    关键约束

    任意连续 kk 秒内,最多上传 11 GB。 这意味着:

    • 当你上传 11 GB 后,接下来的 k1k-1 秒内不能再上传任何数据(否则会违反窗口限制)。
    • 因此相邻两次上传之间必须至少间隔 k1k-1

    上传时间表

    按照最紧凑的方式安排上传:

    上传次数 最早可上传的时刻
    第 1 次 11
    第 2 次 1+k1 + k
    第 3 次 1+2k1 + 2k
    \dots
    nn 1+(n1)k1 + (n-1)k

    因此最短总秒数为:

    ans=1+(n1)k\text{ans} = 1 + (n - 1) \cdot k

    验证样例

    • n=5,k=1n=5, k=11+4×1=51 + 4 \times 1 = 5
    • n=2,k=2n=2, k=21+1×2=31 + 1 \times 2 = 3
    • n=2,k=3n=2, k=31+1×3=41 + 1 \times 3 = 4
    • n=1,k=7n=1, k=71+0×7=11 + 0 \times 7 = 1
    • n=11,k=5n=11, k=51+10×5=511 + 10 \times 5 = 51
    • n=100,k=100n=100, k=1001+99×100=99011 + 99 \times 100 = 9901

    三、复杂度

    每组 O(1)O(1) 计算,总复杂度 O(t)O(t)


    四、AC 代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int t;
        cin >> t;
        while (t--) {
            int n, k;
            cin >> n >> k;
            cout << 1 + (n - 1) * k << '\n';
        }
        return 0;
    }
    • 1

    信息

    ID
    6764
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者