C/C++教程

Solution Of My Contest:playing with 毛玉

本文主要是介绍Solution Of My Contest:playing with 毛玉,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

problem A:等差之和

这是一道魔改题,启发自luogu P4231 三步必杀

易发现一个初始项\(a_1\)、公差\(b_1\)的等差数列与一个初始项\(a_2\)、公差\(b_2\)的等差数列相加得到一个初始项\((a_1+a_2)\)、公差\((b_1+b_2)\)的等差数列

考虑对固定区域的序列操作,发现可以简单维护初始项的标记\(tag_a\)和公差的标记\(tag_b\),求和也可以直接用等差数列求和公式

于是只需用线段树维护区间操作与区间和,复杂度\(O((n+m)\log{n})\)

problem B:等差之积

这是一道原创题

因为 \(p\) 是质数且 \(b < p\),必然存在 \(b\) 的逆元 \(I_b\)

于是将所求式子转化:

\(\big(\ \prod_{i=0}^{n}{\ (a + i \times b)\ } \ \big) \mod p\ \ \Rightarrow \ \ \big[\ \big(\ \prod_{i=0}^{n}{\ (\frac{a}{b} + i)\ } \ \big)\ \times b^{n+1}\ \big] \mod p\)

将 \(b^{n+1}\) 提出来单独计算,记 \(\frac{a}{b}\) 在模 \(p\) 意义下的值为 \(c\)

现在只需求 \(\big(\ \prod_{i=0}^{n}{\ (c + i)\ } \ \big) \mod p\)

即 \(\big(\ \prod_{i=c}^{n+c}{\ i\ } \ \big) \mod p\)

差分得 \(\big[\ \big(\ \prod_{i=1}^{n+c}{\ i\ } \ \big)\ \times\ \big(\ \prod_{i=1}^{c-1}{\ i\ } \ \big)^{-1}\ \big] \mod p\)

于是只需预处理阶乘和阶乘的逆元便可 \(O(1)\) 计算上式

由于 \(c < p\),当 \(n+c \geq p\) 时必有因子 \(p\) (也就是说答案为 \(0\)),所以只需预处理小于 \(p\) 的情况

使用快速幂求 \(b^{n+1}\),总复杂度为 \(O(\ p + q \log{p}\ )\)

problem C:读取信息J(dqxxj)

读取信息J(dqxxj)

problem C:不会输的游戏

不会输的游戏

这篇关于Solution Of My Contest:playing with 毛玉的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!