• codeforces 1610D


    1 good子序列的性质挖掘

    1.1

    对一个序列\(\{b_i\}\),每个元素\(b_i\)对应一个等差数列\(\{x,x+1,x+2,...,x+b_i-1\}\),很显然该数列由首项\(x\)唯一确定,其和为\(xb_i+\frac{b_i(b_i-1)}{2}\)

    因此good序列满足\(\sum\limits_{i=1}^n xb_i+\frac{b_i(b_i-1)}{2}=0\),即\(\sum\limits_{i=1}^nx_ib_i=\sum\limits_{i=1}^n\frac{b_i(1-b_i)}{2}\)

    如何判断一个序列是不是good?根据上述推导,一个序列good等价于该关于\(x_1,x_2,...,x_n\)的一次方程存在一组整数解。

    根据裴蜀定理,该方程有整数解等价于\(gcd(b_1,b_2,...,b_n) | \sum\limits_{i=1}^n\frac{b_i(b_i-1)}{2}\)。这就是判断一个序列是否为good的充要条件。

    以上都是很普通的数学推导。

    1.2

    \(f(a)=\frac{a(a-1)}{2}\)

    注意到如下事实:当\(a\)为奇数时,\(f(a)=\frac{a-1}{2}\cdot a\),此时\(a\mid f(a)\),因此\(f(a)\% gcd(a,.,.,...)=0\).换句话说,当一个\(a\)为奇数时,它在式\(\sum\limits_{i=1}^n\frac{a_i(a_i-1)}{2}\% gcd(a_1,a_2,...,a_n)\)(记为式X)中对和式\(\sum\limits_{i=1}^n\frac{a_i(a_i-1)}{2}\)的贡献为0,即无任何影响,而偶数情况则比较复杂。接下来我们抛开奇数的情况。

    进一步地,我们知道任意整数\(a\)都能表示成\(2^b\cdot c\)的形式,其中\(b\)为非负整数,\(c\)为奇整数。因为上面我们抛开了奇数的情况,此时\(b\)总是正整数。此时\(gcd(a_1,a_2,...,a_n)=2^{min\{b_1,b_2,...,b_n\}}\cdot gcd(c_1,c_2,...,c_n)\)。因此式X可以表示为\(\sum\limits_{i=1}^n\frac{2^{b_i}c_i(2^{b_i}c_i-1)}{2}\% 2^{min\{b\}}\cdot gcd\{c\}\)

    1.3

    单独拿出式X的每一项来看,每一项可以写成\(2^{b_i-1}c_i(2^{b_i}c_i-1)\% 2^{min\{b\}}\cdot gcd\{c\}\)。显然,当\(b_i-1\geq min\{b\}\)时,该式恒为0。

    剩下的只有\(b_i=min\{b\}\)的情况了,这时为\(2^{b_i-1}\cdot c_i(2^{b_i}c_i-1)\% 2^{b_i}\cdot gcd\{c\}\)

    抽象一下这个:设\(a\)为正整数,\(b,c\)为正奇数且\(c\mid b\),则该式为\(b\cdot 2^{a-1}\% c\cdot2^{a}\)

    通过观察(找规律),我们可以发现有\(b\cdot 2^{a-1}\% c\cdot2^{a}=c\cdot 2^{a-1}\)恒成立。接下来我们尝试证明它:

    等价于证明\(b\cdot 2^{a-1}\equiv c\cdot 2^{a-1}(\mod c\cdot2^a)\)。设\(b=x\cdot c\),即证\(x\cdot c\cdot 2^{a-1}\equiv c\cdot 2^{a-1}(\mod c\cdot 2^a)\)。其中\(x\)为正奇数。

    还是不够明显,再抽象一下:设\(y=c\cdot 2^{a-1}\)(1.2节提到任意整数\(a\)都能表示成\(2^b\cdot c\)的形式,这反过来也是正确的,即\(a\)\((b,c)\)构成的这一映射为一一映射,这条定理保证这一设的合理性),即证\(x\cdot y\equiv y(\mod 2y)\)。对正奇数\(x\),归纳法易证其正确性。

    证明完毕之后,我们就知道了当\(b_i=min\{b\}\)时,设模数为\(m\),该项对和式的贡献为\(\frac{m}{2}\),也就是说每两个满足\(b_i=min\{b\}\)的项加起来就为0。

    以上推导足够我们完成这题了。

    2 如何计good子序列数

    很显然,枚举\(min\{b\}\)即可,选取的方案要保证:

    • 存在\(b_i=min\{b\}\)的项,且项数为偶数;
    • 其他项的\(b_i\)需大于\(min\{b\}\)

    注意考虑奇数的情况:\(min\{b\}=0\)时无需保证项数为偶数。

  • 相关阅读:
    linux就该这么学.pdf
    linux中shell编辑小技巧
    相关功能分享
    现代操作系统第三版高清.pdf中文版免费下载
    linux高性能服务器编程pdf免费下载
    git每次更新都需要输入账号密码,如何解决?
    Python 面向对象
    模块和包
    Python常用模块(collections、 time、 random、 os 、sys、序列化模块)
    内置函数和匿名函数(lambda)
  • 原文地址:https://www.cnblogs.com/zhugezy/p/15673206.html
Copyright © 2020-2023  润新知