2019暑假杭二day2测试总结

2019暑假杭二day2测试总结

T1

题目大意

给出一个字符串 S S S,求出一个子序列,使原序列的每个字符出现且仅出现一次,且子序列的字典序最小。

sol

T1我得了90分,离奇 W A WA WA了第一个点,正解比我的算法要简便地多,维护一个栈,对于每个字符,如果已经在栈内就直接跳过;否则,若栈顶字符比它大,且之后出现过,则弹出栈顶,以后在加进来(贪心),当不能弹时将当前字符加入栈内。最后,把栈从下往上输出即可。

T2

题目大意

有一个文本框和一个剪贴板,开始,文本框里有一个内容,剪贴板为空。每次可以进行三种操作:

  1. 将文本框的所有内容复制到剪贴板;
  2. 将剪贴板的内容粘贴到文本框;
  3. 删除文本框的最后一个内容。

f ( x ) f(x) f(x)为地到 x x x个内容,最少需要的操作次数,求
∑ i = 1 n f ( x ) ∗ 192081 7 n − i ( m o d   998244353 ) \sum_{i=1}^nf(x)*1920817^{n-i}(mod\space998244353) i=1nf(x)1920817ni(mod 998244353)
n &lt; = 2000000 n&lt;=2000000 n<=2000000

sol

难点在于求 f ( x ) f(x) f(x),我发现这是一个最短路,于是以文本框和剪贴板为坐标,建出了 n 2 n^2 n2个点,边权都为1,对应一个操作,只得了40分。其实这题可以利用边权,建出 n + 50 n+50 n+50个点,每个点 x x x x − 1 x-1 x1连边权为一的边,向 i ∗ x ( i ∗ x &lt; = n + 50 ) i*x(i*x&lt;=n+50) ix(ix<=n+50)连边权为 i i i的边,为了优化,可以只在 i i i为质数且不超过11的时候连边,当 i i i为合数时,可被几次复制粘贴凑出来,且答案更优。当 n n n大于11时可以玄学证明一定不优。建好图之后跑 s p f a spfa spfa找单源最短路就行dijkstra居然更慢

T3

题目大意

给定一个 n ∗ m n*m nm的矩阵,矩阵有一些位置是障碍(给出坐标),不能通过。现在要从 ( 0 , 0 ) (0,0) (0,0)走到 ( n , m ) (n,m) (n,m),只能往上走和往右走,求有多少种走发。两种走法不一样当且仅当一种走法的某个障碍在路径左边,另一种走法在路径右边 ( 1 &lt; = n , m &lt; = 1 0 9 ) (1&lt;=n,m&lt;=10^9) (1<=n,m<=109)

sol

我开始只写出了无障碍的5分,正解是离散化后 d p dp dp,设 f [ i ] [ j ] f[i][j] f[i][j]为到分第 i i i行第 j j j列的方案数,没遇到障碍就只能往右走,遇到障碍就只能往上走,方案数叠加就行,可以用线段树加扫描线优化。代码细节比较多,我暂时还没实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值