Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块
传送门
题意: 给两个数x,yx,yx,y。现在你计算有多少对a(a<=x)a(a<=x)a(a<=x)和b(b<=y)b(b<=y)b(b<=y)使得⌊ab⌋=amodb\left \lfloor \frac{a}{b} \right \rfloor=a\bmod b⌊ba⌋=amodb。
思路: 因为xxx和yyy都是1e91e91e9的范围,可以想到n\sqrt{n}n求出答案。我们令⌊ab⌋=amodb=k\left \lfloor \frac{a}{b} \right \rfloor=a\bmod b=k⌊ba⌋=amodb=k,那么aaa可以写成k∗b+kk*b+kk∗b+k,又因为k<bk<bk<b,那么k∗k<=k∗b+k=a<=xk*k<=k*b+k=a<=xk∗k<=k∗b+k=a<=x,可得k<=xk<=\sqrt{x}k<=x,现在考虑知道了kkk能否算出答案呢?考虑如下三个个不等式:{1<=b<=y1<=k∗b+k<=xk<b\begin{cases} 1<=b<=y\\ 1<=k*b+k<=x\\ k<b \end{cases}⎩⎪⎨⎪⎧1<=b<=y1<=k∗b+k<=xk<b
解得:k<b<=min(y,x/k−1)k<b<=min(y,x/k-1)k<b<=min(y,x/k−1)
我们枚举kkk就可以得到答案啦。
总结
以上是生活随笔为你收集整理的Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 安卓动态桌面壁纸 全屏会动(安卓动态桌面
- 下一篇: Codeforces Round #70