题意:k时间里,计算在规定行里的红气球数量
分析:递归,例题解析的很明确,两行总数相减。
#include<iostream>
#include<string>
#include<sstream>
#include<set>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
#define LL long long
LL c(int k) {
return k == 0 ? 1 : 3*c(k - 1);
}
LL f(int k, int i) {
if (i == 0)return 0;
if (k == 0)return 1;
LL a = 1 << (k - 1);
if (i < a)return 2 * f(k - 1, i);
else return 2*c(k - 1) + f(k - 1, i - a);
}
int main() {
int k,a,b;
int kase;
cin >> kase;
for (int i = 0; i < kase; i++) {
cin >> k >> a >> b;
cout << "Case " << i + 1 <<": "<< f(k, b) - f(k, a-1) << endl;
}
return 0;
}