不同的l,r区间内部个数,其实就是求每一个区间可以选择的个数
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
#define int long long
#define ld long double
map<int, map<int, int>>ma;
int dfs(int len, int k) {
if (len <= 0 || k < 0)return 0;
if (ma[len].count(k)) {
return ma[len][k];
}
if (len == 1)return 1;
int llen, rlen;
if (len % 2 == 0)
{
llen = len / 2 - 1;
rlen = len / 2;
}
else
{
llen = len / 2;
rlen = len / 2;
}//两个后续区间+上自己本身1
return ma[len][k] = dfs(llen, k - 1) + dfs(rlen, k) + 1;
}
void solve() {
int l, r, k;
cin >> l >> r >> k;
ma.clear();
int len=0;
len= dfs(r - l + 1, k);
cout<<len<<endl;
}
signed main(){
int t;cin>>t;
while(t--)
solve();
}
cats 的二分答案(记忆化搜索)
最新推荐文章于 2024-08-29 16:57:08 发布