比赛链接: https://acm.ayit.edu.cn/contest/10
A:lxd的面修课考试
这个题是个签到题,只需要读懂题体就可以了,代码里有注释。(因为第一次出题没经验,忘了说数据都是整数了.....各位大佬见谅)
标算代码:3274
B:合法表达式
签到题,跑一遍循环,判断三种情况
1.数字后面是左括号:3(1+3)
2.右括号后面是数字:(1+3)3
3.有括号后面是左括号(1+3)(1+3)
然后在中间加上一个乘号就好了,需要注意的是加过乘法号的字符串可能会爆数组大小。
标算代码:3115
C:lxd的乒乓球考试
这个题是道dp题:设0为正手推球,1为下旋球 ,2为上旋球,3为正手攻球,4为拉弧圈。
dp[i][j]表示第i回合为j动作时一共有多少种打法。
所以递推关系为dp[i][j]=(dp[i-1][0]+dp[i-1][1]+dp[i-1][2]+dp[i-1][3]+dp[i-1][4])%1000000007
但是因为有两个条件限制所以dp[i][2]不能加上dp[i-1][1],dp[i][3]不能加上dp[i-1][4]。
然后打个表保留一下结果就好了。
标算代码:3144
D:幸运环
题目就是在一个环上求最大的连续序列和,输出最大和以及起始和结束位置。
因为是在一个环上,有两种情况:(a)1号点不在结果区间的中部 (b)1号点在结果区间的中部
A.对于情况(a)来说,就是在一条链(输入数组)上维护。我们用贪心维护和最大的区间,记录起始和终止点即可。
B.对于情况(b)来说,还在这一条链上维护。我们维护连续和最小的区间,那么用整个环上所有数的和减去这一段区间(连续和最小的区间)的和,正是过1号点(1号点在所选区间的中间部分)的最大区间和。可以思考一下为什么?
那么此题基本上就解决了:max(1号点不在所选中的区间的中部(a),1号点在选择区间的中部(b))
这样就结束了?当然不是,对于一个全是非正数的序列,它的连续最小序列就是全部的元素之和。此时用全部元素之和 - 此时的元素之和 = 0,那么0是最大的元素吗?不一定吧,因为所有元素<=0 可能就没有0这个元素。因此需要特判一下,如果全是非正数的话,只执行上面的A就好了。注意无穷大和long long就好了。
标算代码:3136
E:密文信息
别问,问就是板子题: Manacher求最长回文串 + 哈希。
有好多人没有看清题目,上手就是求最长回文数的个数,其实是求最长回文串的种类数。无坑....
打个广告:Manacher模板
标算代码:3127