題解 CF1352C 【K-th Not Divisible by n】
阿新 • • 發佈:2020-08-29
實際發表時間:2020-05-12
https://www.luogu.com.cn/problem/CF1352C
求第\(k\)個不被\(n\)整除的數
Solution
首先可以想到暴力列舉,但是看到資料範圍,肯定會TLE.
那麼就得換一個思路了。
我們按每個正整數對\(n\)除的商和餘可以得到一個表格:
1 | 2 | \(\cdots\) | \(n-1\) | \(n\) |
---|---|---|---|---|
\(n+1\) | \(n+2\) | \(\cdots\) | \(2n-1\) | \(2n\) |
\(\cdots\) | \(\cdots\) | \(\cdots\) | \(\cdots\) | \(\cdots\) |
\(xn+1\) | \(xn+2\) |
\(\cdots\) | \((x+1)n-1\) | \((x+1)n\) |
由於我們只要不被\(n\)整除的,那麼就把最後一列去掉:
1 | 2 | \(\cdots\) | \(n-1\) |
---|---|---|---|
\(n+1\) | \(n+2\) | \(\cdots\) | \(2n-1\) |
\(\cdots\) | \(\cdots\) | \(\cdots\) | \(\cdots\) |
\(xn+1\) | \(xn+2\) | \(\cdots\) | \((x+1)n-1\) |
現在就要求表格裡的第\(k\)個數。不難發現,第\(k\)個數就在第\(x=\left\lceil\dfrac{k}{n-1}\right\rceil\)
Code
#include<bits/stdc++.h> using namespace std; inline void readint(int &x)//快讀 { int f=1;x=0; char ch=getchar(); while(!isdigit(ch)) { if(ch=='-')f=-1; ch=getchar(); } while(isdigit(ch)) { x=(x<<3)+(x<<1)+ch-48; ch=getchar(); } x*=f; } int t,n,k; inline int myceil(int x,int y){return x%y?x/y+1:x/y;}//x/y的向上取整 int main() { readint(t); while(t--) { readint(n),readint(k); int x=myceil(k,n-1),y=(k-1)%(n-1)+1;//計算行列 printf("%d\n",n*(x-1)+y);//輸出答案 } return 0; }