/ SynacorChallenge / teleporter.cpp
teleporter.cpp
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int MOD = 1<<15; 6 map<tuple<int, int>, int> dp; 7 int param; 8 9 int ack(int a, int b) { 10 a %= MOD; 11 b %= MOD; 12 if (!a) return (b+1)%MOD; 13 tuple<int, int> key = make_tuple(a, b); 14 if (dp.count(key)) return dp[key]; 15 16 if (!b) return dp[key] = ack(a - 1, param); 17 else return dp[key] = ack(a - 1, ack(a, b - 1)); 18 } 19 20 int ackermann(int k) { 21 param = k; 22 dp.clear(); 23 return ack(4, 1); 24 } 25 26 int main() { 27 for (int i = 1; i < MOD; i++) { 28 if (i%500==0) cout << i << "\n"; 29 if (ackermann(i) == 6) { 30 // RESULT: 25734 31 cout << "RESULT: " << i << endl; 32 break; 33 } 34 } 35 return 0; 36 }