Suppose the input for a problem is positive integer N and answer happens to be 1/N. Here is what happens for different constraints on N.
- N <= 10^9 Everyone does math and all solutions are
cout << 1.0 / N
- N <= 10^6 You see solutions from above but some contestants decide to use iterative approach, something like
double ans = 1.0; for (int i = 2; i <= N; i++) ans = ans * i / (i — 1);
- N <= 10^5 Mostly solutions from above, but some contestants use recursion (maybe with memoization)
double f(int N) { if (N == 1) return 1.0; return f(N — 1) * N / (N — 1); }
N <= 500 Solutions from above, but some contestants go with O(N^3) dynamic programming
N <= 100 Some contestants realize that you can precompute all answers const double ans[100]={1.0, 0.5, 0.333333333, ... }
N <= 36 You see solutions with meet-in-the middle approach
N <= 20 You start to see a lot of bitwise operations in codes — Dynamic programming on subsets
N <= 10 Some C++ codes use next_permutation(), Java coders having hard time