【省选模拟】20/06/18

AA

  • 大概就是考场思路,当时觉得细节太多没写完
    考虑从后向前 dpdp 出当前的合法长度,从前向后维护可能成为答案的串的集合,需要根据这个 dpdp 判一下合法性,注意到若一个串不是另一个的前缀一定可以删除一个
    串的集合是一个串和它的若干个前缀,用一个串和一个集合可以表示一个状态
    考虑当前的串拼接进去,需要把不是前缀的串给筛掉,发现只需要求当前串串头和答案串每个位置的 lcplcp,用 ZalgorithmZ-algorithm 解决
    反思了一下为啥我的做法细节麻人,就是我插入串的时候要弹前面的,弹后面的
    而题解求出了一个最小值(字典序相同长度大的小),所以只需要把集合中的点拿去更最小值比就可以快速更新,CodeCode

BB

  • 考虑限制是不经过两条直线(nn 维空间),即 fif_i 为第一次走到第一条直线不经过两条直线的方案数
    gig_i 为第二条,记总方案数为 ai,bi,cia_i,b_i,c_i 表示从 ff 走到 ff 上,从 ff 走到 gg,以及从 gg 走到 ff 上,进行容斥,容易写成生成函数的形式:
    F=AAFCGG=BAGBFF=A-AF-CG\\ G=B-AG-BF
    答案是 GG 的末项,注意其中 A0=0A_0=0,解出来多项式求逆即可,CodeCode

CC

  • zxyzxy 的神仙做法,考虑对每个点求出它为一个端点的答案,枚举另一个端点,统计外面路径的个数,注意到可以 dsu on treedsu\ on\ tree 预处理子树内部或子树外部的方案数,点分,要加上链上挂的子树内部的路径条数,拆一下项就可以快速维护,CodeCode
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章