1 条题解

  • 0
    @ 2021-1-31 21:17:50

    练35.1 传输数据

    解题思路

    最初1台持有数据,每秒每台最多再传k台,所以持有量最多乘k+1。循环扩张直到达到n,次数即最短时间。

    正确性说明

    t秒后持有量不超过(k+1)^t;每秒向尚未持有的不同电脑传输能达到该上界或覆盖剩余全部,因此首次达到n的t既是下界又可实现。

    易错点

    n=1为0秒;累计用long long并可截为n。

    复杂度

    时间O(log_(k+1)n),空间O(1)。

    参考代码(C++11)

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

    信息

    ID
    241
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者