现在才会类欧我好菜啊,而且是简单的部分
特殊类欧
-
求 L ≤ v x % M ≤ R L\leq vx\%M\leq R L≤vx%M≤R的最小的 x x x。
-
记 f ( M , v , L , R ) f(M,v,L,R) f(M,v,L,R)为上面的答案 ( 0 < v < M , 0 ≤ L , R < M ) (0<v<M,0\le L,R <M) (0<v<M,0≤L,R<M)
-
按照一般的套路,将特殊的情况判掉,最后再缩减范围即可。
-
首先保证 0 ≤ L ≤ R < M 0\le L\le R<M 0≤L≤R<M,否则如果 L ≤ 0 ≤ R L\le 0\le R L≤0≤R, x = 0 x=0 x=0。
-
然后判断无解的情况
- 因为所有 v x % M vx\%M vx%M一定可以表示成 k ∗ g c d ( M , v ) k*gcd(M,v) k∗gcd(M,v),所以要求:
- ⌊ L − 1 ( M , v ) ⌋ + 1 ≤ ⌊ R ( M , v ) ⌋ \left \lfloor \frac{L-1}{(M,v)} \right \rfloor+1\le\left \lfloor \frac{R}{(M,v)} \right \rfloor ⌊(M,v)L−1⌋+1≤⌊(M,v)R⌋
-
最小解
- 如果 ⌊ L − 1 v ⌋ + 1 ≤ ⌊ R v ⌋ \left \lfloor \frac{L-1}{v} \right \rfloor+1 \le\left \lfloor \frac{R}{v} \right \rfloor ⌊vL−1⌋+1≤⌊vR⌋
- 显然 x = ⌊ L − 1 v ⌋ + 1 x=\left \lfloor \frac{L-1}{v} \right \rfloor+1 x=⌊vL−1⌋+1为最小的解。
- 否则就满足 L % v ≤ R % v L\%v\le R\%v L%v≤R%v
-
修改 v v v保证时间复杂度
- 如果 2 v ≥ M 2v\ge M 2v≥M,不妨全部取一个负数。
- f ( M , v , L , R ) = f ( M , M − v , M − R , M − L ) f(M,v,L,R)=f(M,M-v,M-R,M-L) f(M,v,L,R)=f(M,M−v,M−R,M−L)。
- 那么保证了 v ≤ M 2 v\le\frac{M}{2} v≤2M
-
那么现在有 L ≤ v x % M ≤ R L\le vx\%M \le R L≤vx%M≤R
-
L ≤ v x − p M ≤ R L\le vx-pM\le R L≤vx−pM≤R,左右 % v \%v %v得到:
-
L % v ≤ ( v − M % v ) p ≤ R % v L\%v\le (v-M\%v)p\le R\%v L%v≤(v−M%v)p≤R%v,在 % v \%v %v下要求一个最小的 p p p,然后就可以凑一个 x x x使得满足原问题了。
-
这个也是一个子问题 p = f ( v , v − M % v , L % v , R % v ) p=f(v,v-M\%v,L\%v,R\%v) p=f(v,v−M%v,L%v,R%v),由于上面对 v v v保证 v ≤ M 2 v\le\frac{M}{2} v≤2M,所以是 O ( l o g ) O(log) O(log)的。
-
x = ⌊ L + p M − 1 v ⌋ + 1 x=\left \lfloor \frac{L+pM-1}{v} \right \rfloor+1 x=⌊vL+pM−1⌋+1。

350

被折叠的 条评论
为什么被折叠?



