Uva 12627 Erratic Expansion——递推

xiaoxiao2021-02-28  134

注意用long long

#include <cstdio> using namespace std; long long c[50]; long long dfs(int k, int i) { if (i == 0) return 0; if (k == 0) return 1; int kk = 1 << (k - 1); if (kk > i) return dfs(k - 1, i) * 2; else return dfs(k - 1, i - kk) + c[k - 1] * 2; } int main() { c[0] = 1; for (int i = 1; i <= 31; i++) { c[i] = c[i - 1] * 3; } int T, k, A, B, flag = 0; scanf("%d", &T); while (T--) { scanf("%d %d %d", &k, &A, &B); printf("Case %d: %lld\n", ++flag, dfs(k, B) - dfs(k, A - 1)); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-40906.html

最新回复(0)