Loading [MathJax]/extensions/TeX/mathchoice.js

zhugezy

codeforces 1610D

1 good子序列的性质挖掘

1.1

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

因此good序列满足ni=1xbi+bi(bi1)2=0,即ni=1xibi=ni=1bi(1bi)2

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

根据裴蜀定理,该方程有整数解等价于gcd(b1,b2,...,bn)|ni=1bi(bi1)2。这就是判断一个序列是否为good的充要条件。

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

1.2

f(a)=a(a1)2

注意到如下事实:当a为奇数时,f(a)=a12a,此时af(a),因此f(a)%gcd(a,.,.,...)=0.换句话说,当一个a为奇数时,它在式ni=1ai(ai1)2%gcd(a1,a2,...,an)(记为式X)中对和式ni=1ai(ai1)2的贡献为0,即无任何影响,而偶数情况则比较复杂。接下来我们抛开奇数的情况。

进一步地,我们知道任意整数a都能表示成2bc的形式,其中b为非负整数,c为奇整数。因为上面我们抛开了奇数的情况,此时b总是正整数。此时gcd(a1,a2,...,an)=2min{b1,b2,...,bn}gcd(c1,c2,...,cn)。因此式X可以表示为ni=12bici(2bici1)2%2min{b}gcd{c}

1.3

单独拿出式X的每一项来看,每一项可以写成2bi1ci(2bici1)%2min{b}gcd{c}。显然,当bi1min{b}时,该式恒为0。

剩下的只有bi=min{b}的情况了,这时为2bi1ci(2bici1)%2bigcd{c}

抽象一下这个:设a为正整数,b,c为正奇数且cb,则该式为b2a1%c2a

通过观察(找规律),我们可以发现有b2a1%c2a=c2a1恒成立。接下来我们尝试证明它:

等价于证明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时无需保证项数为偶数。

posted on   zhugezy  阅读(62)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示