P1045 压位60pts TLE求助
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll mson[3100010], l;
void mul(ll x) {
for (int i = 1; i <= l; i ++) {
mson[i] *= x;
}
for (int i = 1; i <= l; i ++) {
if (mson[i] > 9) {
mson[i + 1] += mson[i] / 10;
mson[i] %= 10;
}
}
if (mson[l + 1]){
l ++;
while (mson[l] >= 10){
mson[l + 1] += mson[l] / 10;
mson[l] %= 10;
l ++;
}
}
}
int main() {
int p;
scanf("%d",&p);
mson[1] = l = 1;
for (int i = 1; i <= p / 40; i ++) {
mul(1099511627776);
}
p %= 40;
for (int i = 1;i <= p;i ++){
mul(2);
}
printf("%lld\n",l);
for (int i = 1; i <= 500; i ++) {
if (i != 500) printf("%lld",mson[500 - i + 1]);
else printf("%lld",mson[500 - i + 1] - 1);
if (i % 50 == 0 && i != 500) cout << endl;
}
return 0;
}