2020 湖南省大学生程序设计竞赛(HNCPC)题解

题目来源

A. 2020-substring

签到题。设dp[i]为[1~i]的串有多少个连续2020,如果s[i-3,i]是“2020”那么dp[i] = max(dp[i-1], dp[i-4), 否则dp[i] = dp[i-1]

B. 2020-vs-2018

观察可以发现只要看有多少个被o包围的联通快即可。3个联通快就是2018否则是2020

C. absolute-difference-equation

这题里面的差分取绝对值运算,其实相当于是异或运算。那么可以把每一次变换后的结果写出来观察一下
a 1 , a 2 , a 3 , a 4..... a n a1,a2,a3,a4.....an a1,a2,a3,a4.....an
a 1 ∗ a 2 , a 2 ∗ a 3 , a 3 ∗ a 4..... a1*a2,a2*a3,a3*a4..... a1a2,a2a3,a3a4.....
a 1 ∗ a 2 2 ∗ a 3 , a 2 ∗ a 3 2 ∗ a 4... a1*a2^2*a3,a2*a3^2*a4... a1a22a3,a2a32a4...
这里 ∗ * 表示异或。那么最终化为一个数字的时候, a i a_i ai的贡献是 C n − 1 i − 1 C_{n-1}^{i-1} Cn1i1次异或。当它为奇数的时候才算有贡献。
因此我们判断每个位置的组合数的奇偶性,并且判断有多少个 ? ? ?是贡献奇数次,有多少个 ? ? ?贡献偶数次。如果没有贡献奇数次的 ? ? ?,最终结果无法改变,如果最终结果是0那么方案就是0,否则是 2 偶 数 ? 的 个 数 2^{偶数?的个数} 2?
否则答案是 2 偶 数 ? + 奇 数 ? − 1 2^{偶数?+奇数?-1} 2?+?1

D commutive-string-pair

当s1 + s2 = s2 + s1的时候,意味着他们拥有相同的最小循环节。用kmp求出最小循环节然后哈希判断一下即可。

E make-roundgod-very-happy

这题考虑每个位置i的a[i]作为最大值可以掌控的区间为[ L[i], R[i] ],其中[ L[i],i-1 ]的每个值都小于等于a[i],[i+1,R[i]]的每个值都小于a[i]。L[i], R[i]可以用单调栈得到
a[i]贡献的区间一定是右端点 >= i且 <= R[i], 左端点 <= i 且 >= L[i]的区间,且区间长度 len <= a[i]-m
画图来看一下:
在这里插入图片描述
如图,对于[i, t]这些右端点来说,[L[i], i]的所有点都可以作为它们的左端点,因此i对它们的贡献都是x,而从t开始,对t+1,t+2,…的贡献是x-1, x-2, x-3…
也就是对一段区间加上一个等差序列。这个操作可以通过二次差分来实现。
然后这题就结束了。最后把差分数组还原回来即可。

F mixe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值