[CF2053C] Bewitching Stargazer 题解
我们不妨直接递归模拟算答案。
定义
这样做显然会 T,考虑如何优化。我们注意到每次由
于是改写一下函数,将求解函数定义为 pair
型,first
存答案,second
存区间内能取到的个数,直接算就好了。
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define Linf 0x3f3f3f3f3f3f3f3f
#define pii pair<int, int>
#define all(v) v.begin(), v.end()
#define int long long
using namespace std;
//#define filename "xxx"
#define FileOperations() freopen(filename".in", "r", stdin), freopen(filename".out", "w", stdout)
namespace Traveller {
int n, k;
pii operator + (pii a, pii b) { return pii(a.first + b.first, a.second + b.second); }
pii solve(int n) {
if(n < k) return pii(0, 0);
pii res = solve(n/2);
if(n & 1) return res + res + pii(res.second * (1+n >> 1) + (1+n >> 1), 1);
return res + res + pii(res.second * (n >> 1), 0);
}
void main() {
scanf("%lld%lld", &n, &k);
printf("%lld\n", solve(n).first);
}
}
signed main() {
#ifdef filename
FileOperations();
#endif
int _;
cin >> _;
while(_--) Traveller::main();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步