专栏文章
题解:CF2044E Insane Problem
CF2044E题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miptbv06
- 此快照首次捕获于
- 2025/12/03 17:36 3 个月前
- 此快照最后确认于
- 2025/12/03 17:36 3 个月前
思路分析
看到题目,,我们可以使用等式的基本性质,将这个式子转换成 ,我们就可以枚举出每个 ,然后对 和 进行讨论。
由题可得:
- 。
- 。
所以我们可以得出 。所以利用我们非常一般的数学知识,其实就是求 的取值范围。我们可以看下图。

我们可以发现对于每个 来说, 的取值范围也就是答案就是 与 的交集。最后,我们将每个 的答案给加起来就可以了。
参考代码
#include<bits/stdc++.h>
#define ll long long
#define db double
using namespace std;
const int inf=2e9;
ll l1,r1,l2,r2,k;
void solve()
{
scanf("%lld%lld%lld%lld%lld",&k,&l1,&r1,&l2,&r2);
ll n=1,ans=0;
while(n<=r2&&n*l1>0&&n*l1<=r2)
{
ll l2b,r2b;
l2b=(l2+n-1)/n,r2b=r2/n;
if(r2b>=l1&&r1>=l2b)
{
ans+=min(r2b,r1)-max(l1,l2b)+1;
}
n*=k;
}
printf("%lld\n",ans);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
solve();
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...