1. 程式人生 > 實用技巧 >CF1352C 【K-th Not Divisible by n】

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;
}