• 2019暑假杭二day2测试总结


    T1

    题目大意

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

    sol

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

    T2

    题目大意

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

    1. 将文本框的所有内容复制到剪贴板;

    2. 将剪贴板的内容粘贴到文本框;

    3. 删除文本框的最后一个内容。

    (f(x))为地到(x)个内容,最少需要的操作次数,求

    [sum_{i=1}^nf(x)*1920817^{n-i}(modspace998244353) ]

    (n<=2000000)

    sol

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

    T3

    题目大意

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

    sol

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

  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/hht2005/p/11402666.html
Copyright © 2020-2023  润新知