CF1352C 【K-th Not Divisible by n】
比赛的时候脑子糊了,简单结论题没想出来,最后乱搞了个二分过的((
思路
每次二分一个答案 \(x\) 。
那么 \(x\) 之前无法算进答案的数的个数显然是 \(\lfloor \frac{x}{n} \rfloor\)
所以若答案是 \(x\) ,则在它之前符合条件的数就是 \(x -\lfloor \frac{x}{n} \rfloor\)
每次判断一下在它之前符合条件的数是否大于等于 \(k\) 即可。
Code
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<bitset>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define LL long long
using namespace std;
LL read()
{
LL ans=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
return ans*f;
}
LL t,n,k,ans,l,r;
int main()
{
t=read();
while(t--)
{
n=read();k=read();
if(k<n)
printf("%lld\n",k);
else
{
l=1,r=1e18;
while(l<=r)
{
LL mid=l+r>>1;
if(mid-mid/n>=k)
{
ans=mid;
r=mid-1;
}
else
l=mid+1;
}
printf("%lld\n",ans);
}
}
return 0;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。