试着自己写了一个500位的高精度结构体进行计算,学了快速幂的算法,没有压位。结果一跑直接全部TLE了。在阅读了几篇题解,确信自己代码应该没问题之后,突然看到说建议把O2优化关掉,试了试,全AC了。
理论上O2优化应该是加速代码运行速度的,但为什么反而会超时呢?求大佬解惑。
附上代码(仅供调试):
#include <iostream>
#include <cmath>
using namespace std;
struct HQNumber{
int digits[500]={0};
HQNumber operator*(HQNumber &B){
HQNumber ans;
int dP = 0;
for(int i=0;i<500;i++){
ans.digits[i] += dP;
for(int j=0;j<=i;j++){
ans.digits[i] += digits[j]*B.digits[i-j];
}
dP = ans.digits[i]/10;
ans.digits[i] %= 10;
}
return ans;
}
};
ostream & operator<<(ostream &out, HQNumber &B){
for(int i=0;i<10;i++){
for(int j=0;j<50;j++){
cout << B.digits[499-i*50-j];
}
cout << endl;
}
}
int main(){
int P;
cin >> P;
cout << ceil(P*log10(2)) << endl;
HQNumber base, ans;
base.digits[0] = 2;
ans.digits[0] = 1;
for(int b=P;b;b/=2){
if(b%2==1){
ans = ans * base;
}
base = base * base;
}
ans.digits[0] --;
cout << ans;
return 0;
}