推 Ackermann 的通项,刚开始直接搞,果断 MLE 了。。。
高中数列知识即可
#include <cstdio> using namespace std; const int maxm = 4, maxn = 1001000; typedef long long LL; LL ak[maxm][maxn]; LL mypow(LL x) { LL ret = 1; LL k = 2; while(x) { if(x & 1) ret *= k; k *= k; x /= 2; } return ret; } int main() { int m, n ; for(int i = 0; i < maxn; i++) ak[0][i] = i + 1; for(int i = 0; i < maxn; i++) ak[1][i] = i + 2; for(int i = 0; i < maxn; i++) ak[2][i] = 2 * i + 3; for(int i = 0; i < 25; i++) ak[3][i] = mypow(i+3) - 3; while(~scanf("%d%d", &m, &n)) printf("%lld\n", ak[m][n]); return 0; }