由数据范围反推
约 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 是十万,你会考虑什么复杂度的算法?
登录 后可看答案