TLE求调
查看原帖
TLE求调
1528563
lyt_tcsn楼主2025/2/4 13:11

https://www.luogu.com.cn/record/201244245

#include <bits/stdc++.h>
using namespace std;
class BigInt {
public:
	int a[50005];
	int len = 0;
	BigInt(string x = "0") {
		memset(a, 0, sizeof(a));
		len = x.size();
		for (int i = 0; i < len; i++) {
			a[i + 1] = x[len - i - 1] - '0';
		}
	}
	void flatten(int newSize) {
		len = newSize;
		for (int i = 1; i <= len; i++) {
			a[i + 1] += a[i] / 10;
			a[i] %= 10;
		}
		while (!a[len]) len--;
	}
	int& operator[] (int index) {
		return a[index];
	}
	BigInt operator* (BigInt& b) {
		int n = len, m = b.len;
		BigInt c;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				c[i+j-1] += a[i] * b[j];
			}
		}
		c.flatten(n + m + 2);
		return c;
	}
};
BigInt qpow(BigInt a, long long p) {
	BigInt ans("1");
	while (p) {
		if (p & 1) {
			ans = ans * a;
		}
		a = a * a;
		p >>= 1;
	}
	return ans;
}
int main() {
	long long p;
	cin >> p;
	BigInt ans = qpow(BigInt("2"), p);
	ans[1]--;
	cout << ans.len << endl;
	for (int i = 500; i >= 1; i--) {
		if (i != 500 && i % 50 == 0) cout << endl;
		cout << ans[i];
	}
	return 0;
}
2025/2/4 13:11
加载中...