Stern-Brocot Tree、伪.GCD 副本

Stern-Brocot Tree、伪.GCD 副本

伪.GCD

问题 1:\(f(a,b,c,n) = \sum_{i=0}^{n} [\frac{ai+b}{c}]\)

code

问题 2:求 \(\frac{a}{b}<\frac{x}{y}<\frac{c}{d}\),的最小正整数解 \(y\).

Stern-Brocot Tree

提问:xxxxxx 问题的答案是 \(\frac{p}{q}\) (\(p \leq 10^6, q \leq 10^5\)),怎么二分?

:我可以二分一个实数 ........ 然后 ....... 睡觉。

做法 solve(a,b,c,d)\([\frac{a}{b},\frac{c}{d}]\) 中寻找答案。

  • check 一下 \(\frac{a+c}{b+d}\)
  • 小了的话,沿着 SB 树向右下方突突突。二分求出极小的 \(k\),使得 \(\frac{a+kc}{b+kd}\) 大于等于正确答案。solve(a,b,a+kc,b+kd)
  • 大了的话,沿着 SB 树向右下方突突突。二分求出极小的 \(k\),使得 \(\frac{ka+c}{kb+d}\) 小于等于正确答案。solve(ka+c,kb+d,c,d)

练习

It's a Mod, Mod, Mod, Mod World

  • \(\sum_{i=1}^{n} pi\%q = \sum_{i=1}^{n}(pi-q[\frac{pi}{q}]) = \frac{pn(n+1)}{2} - q\sum_{i=1}^{n}[\frac{pi}{q}]\)

Rikka with Ants

  • 对于直线 \(y=\frac{a}{b}x\),点 \((x,y)\) 在路径上,那么 \(\frac{y}{x} \leq \frac{a}{b}, \frac{y+1}{x-1}>\frac{a}{b}\)
    化简一下 \(\frac{a(x-1) - b}{b}< y \leq \frac{ax}{b}\)
  • 不妨设 \(\frac{a}{b}<\frac{c}{d}\),那么有 \(\frac{c(x-1)-d}{d} <y \leq \frac{ax}{b}\)
  • \(ans=\sum_{x=1}^{n} [\frac{ax}{b}] - \sum_{x=1}^{n}[\frac{cx-(c+d)}{d}]\)

KM and M

  • 逐位考虑,考虑第 \(b\) 位,我们想知道多少个 \(k\) 使得 \(km\) 在这位上为 1,即 \(km\%(2^b) \geq 2^{b-1}\)
  • \(ans = \frac{[\sum{km\%2^b}] - [\sum km\%2^{b-1}]}{2^{b-1}}\)

WifiPlanet

  • 把多边形剖成若干个梯形。
  • 不会剖简单多边形,被搞得自闭了。

probedroids

  • 用「伪.gcd」check 答案
  • SB 树上二分即可。

转载于:https://www.cnblogs.com/FST-stay-night/p/11601237.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值