UOJ Logo Hanwei_的博客

博客

AYITOJ Easy Round #2 题解

2019-06-06 22:00:20 By Hanwei_

比赛链接: 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

评论

zdw1999
bonus: C题还可以直接 f[0]=1,f[1]=5, f[i]=f[i-1]*5-f[i-2]*2; E题也可以二分+哈希做: https://acm.ayit.edu.cn/submission/3126
Hanwei_
补充:C题也可以用矩阵打表:https://acm.ayit.edu.cn/submission/3446
1
1234

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。