由数据范围反推

10 分钟

出题人给的数据范围,其实是在悄悄告诉你该用多快的算法。粗略记:电脑一秒大约能跑一亿次。所以 到一千, 是一百万次,两层循环没问题;但 到十万, 就是一百亿次,必然超时,只能用 。看到范围先估一下,能帮你排除掉行不通的思路。

#include <iostream>
using namespace std;
int main() {
    long long n = 100000;
    cout << n * n << endl;    // 100 亿,两层循环会超时
    cout << n * 17 << endl;   // n*log2(n) 约 170 万,很快
    return 0;
}

要注意 这类相乘很容易超出 int 的范围,估算时用 long long。别看到十万觉得“不大”就顺手上两层循环。

小纸条

n 是十万,你会考虑什么复杂度的算法?

登录 后可看答案

由数据范围反推 · C++ 入门 · op599 课程