zoukankan      html  css  js  c++  java
  • AGC044(F未做)

    A

    倒过来搞,关键位置只有(2,3,5)的倍数,由于每次是除以一个数,关键位置仅有(60^3)

    B

    这题为啥比A简单...

    C

    显然,当前位置与初始位置是一一对应的
    对三进制(N)位建trie,特殊的是,根到叶子节点是从低位到高位
    每个叶子节点的位置对应着当前所处的位置,每个叶子节点的编号对应着初始的位置

    操作一:每个点交换((1,2))儿子。这个可以打标机
    操作二:考虑最低位,(0longrightarrow 1)(1longrightarrow 2)(2longrightarrow 0)然后进位。儿子((0,1,2)longrightarrow (2,0,1)),然后递归当前(0)儿子(也就是((2,0,1))中的(2)

    D

    首先对每个字符,单独一个字符,查询

    • 若得到的答案均相同,说明每个字符均出现在字符串中。则(L=)查询(+1)
    • 若得到的答案不同,显然仅有两种答案,(L=)较大答案

    这样我们得到了字符串的长度(L)

    对每个字符,长度为(L)的串,查询。
    这样我们得到了每个字符出现的次数

    结论:对于(S,T(|S|le |T|)),其编辑距离为(|T|-|S|)的充要条件为(S)(T)的子序列
    根据此结论,我们可以对字符进行合并。
    具体而言,令(f(S))(其中(S)是字符集的子集)在字符串中的最大子序列。
    对于(f(S),f(T)(Scap T=emptyset)),可以通过(O(f(S)+f(T)))次查询合并

    E

    (f_i)(i)位置最大值,显然:(f_i=max(a_i,frac{f_{i-1}+f_{i+1}}{2}-b_i))
    有个不需要啥技术含量的(O(n^2)),就是(a_i)从大到小,每次更新一个位置,然后用这个位置更新其他的
    通过推式子大概会得到一个麻烦的等差数列为系数的东西,用线段树维护。(O(nlogn))

    不过会被卡精度

    考虑若(b_i=0),对于固定的两点(u,v),去更新其他点

    [egin{cases} P_u=a_u \ P_v=a_v \ P_i=dfrac {P_{i-1}+P_{i+1}}2 & i in (u,v) end{cases}]

    [P_i = dfrac {(i-u)a_v+(v-i)a_u}{v-u} (i in [u,v]) ]

    这是个以((u,a_u),(v,a_v))为端点,其连线为(P_i)的东西,可以用凸包维护

    但我们实际的式子是这样的

    [egin{cases} P_u=a_u \ P_v=a_v \ P_i=dfrac {P_{i-1}+P_{i+1}}2-b_i & i in (u,v) end{cases}]

    我们考虑构造({c}),使得(P_i'=P_i-c_i)以满足较简式子

    [egin{cases} P'_u=a_u-c_u \ P'_v=a_v-c_v \ P'_i = dfrac {P_{i-1}+P_{i+1}}2-b_i -c_i = dfrac {P'_{i-1}+P'_{i+1}}2-b_i-c_i+dfrac {c_{i-1}+c_{i+1}}2 & i in (u,v) end{cases}]

    序列({c})需满足:(b_i = dfrac {c_{i-1}+c_{i+1}}2-c_i)
    (c_1=c_2=0,c_{i+1}=2(b_i+c_i)-c_{i-1})即满足条件

  • 相关阅读:
    两数相除(leetcode29)
    基本数据类型与包装数据类型的使用标准
    BigDecimal
    整型包装类值的比较
    实现strStr()(leetcode28)
    移除数组(leetcode27)
    删除排序数组中的重复项(leetcode26)
    mybatis.xml配置文件详解
    多表连接
    动态SQL
  • 原文地址:https://www.cnblogs.com/Grice/p/13227047.html
Copyright © 2011-2022 走看看