• The Preliminary Contest for ICPC Asia Xuzhou 2019


    传送门

    •参考资料

      [1]:官方题解提取码:g5q6) 

    E. XKC's basketball team(思维)

    •题意

      n 个人,每个人都有权值,其中第 i 个人的权值为 $w_i$;

      定义一个 $anger$ 值,$forall j in [i+1,n] ,exists w_j geq w_i + m , anger=max{j-i-1}$;

      求这 n 个人的 $anger$;

    •方法一(倒推+维护递增序列)

      

    •Code

      2019ICPC徐州网络赛E(1).cpp

    •方法二(ST表+二分)

      提前预处理出 w 的 ST 表;

      对于第 i 个人,二分查找距离他最远的并满足 $w_j geq w_i + m$ 的 j;

      比赛的时候就是用的这个方法,WA 到我怀疑人生;

      赛后重做,找到 bug,这个 bug 能让我气死---求反了!!!!!

      题目要求求的是使得 $w_j geq w_i + m$ 的最远的 j,比赛时读的题意也是这个;

      可在我写代码时,却写成了判断是否有使得 $w_j + m geq w_i$ 的 j,并求出最远的那个;

      我擦,这么智障的错误竟然也会犯,并因此导致 debug 一个多小时,生气!!!

    •Code

      2019ICPC徐州网络赛E(2).cpp

    •感悟

      比赛的时候,光想着用一些高级的数据结构来解决这道题,却缺失了思维;

      思维不过关,注定要当一只蒟蒻,并且一直都是;


    G. Colorful String(回文自动机)

    •题意

      给你一个字符串 s,假设 s 中共有 k 个回文串;

      让你求解 $ans=sum_{i=1}^{k} val_i$;

      其中 $val_i$指的是第 i 个回文串中不同的字符个数;

    •题解

      求解 s 中所有的回文串,第一反应就是回文自动机;

      但是对于回文自动机求出的回文串,如何快速求解这个回文串中不同的字符个数呢?

      方法一:

        将回文自动机求出的所有回文串的左右端点[l,r]以及相应的cnt保存,离线或在线求解 s 中 [l,r] 区间内不同字符的个数;

        可以参考这道题目【洛谷 P1972 [SDOI2009]HH的项链】学习如何快速求解;

        2019ICPC徐州网络赛G(1).cpp

      方法二:

        利用回文自动机节点间的联系快速求解;

        假设当前插入的字符为 $s_i$;

        在插入 $s_i$ 前会求解 cur 节点,使得在 cur 节点所表示的回文串的两端添加字符 $s_i$ 依旧会形成回文串;

        那么,我们可以定义一个数据结构:

    unordered_set<char >_set[maxn];

        _set[ i ] 插入的是节点 i 的所表示的回文串中的字符,并通过 set 去重;

        那么,假设插入 $s_i$ 后形成一个新的回文串,并放在了 x 节点里;

        那么,我们只需要将 _set[x] 中插入 _set[cur] 的所有字符+新增字符$s_i$ 即可通过 _set[ x ].size() 快速找到 x 节点所包含的不同的字符个数;

        2019ICPC徐州网络赛G(2).cpp

    M. Longest subsequence(思维)

    •题意

      给你两个串 S,T;

      让你在 S 串中找比 T 串字典序大的串,并输出长度最长的那个;

      如果不存在,输出 -1;

    •题解

      

      首先,可以在 O(n) 的时间复杂度内求出 S 串包含的 T 串的最长前缀对应的位置;

       我用数组 p 记录;

      即 $S_{p_1} = T_1 , S_{p_2} = T_2 , cdots ,S_{p_x}=T_x ,p_1 < p_2 < cdots p_x$;

      x 指得是最多匹配了 T 串的前 x 个字符;

      关于 p 数组的求解,和【2019南昌网络预选赛 M.Subsequence】这道题很想,你可以参考我的这篇博客求解;

  • 相关阅读:
    Java 打印HelloKitty
    Android四大组件:BroadcastReceiver 介绍
    详解 Handler 消息处理机制(附自整理超全 Q&A)
    垃圾回收机制 —— 整理介绍
    四种引用类型 —— 软引用与弱引用的应用
    线程池 —— 使用介绍
    倒计时器 CountDownTimer
    屏幕旋转时 Activity 的生命周期 —— 测试与结论
    arcengine Objects in this class cannot be updated outside an edit session(不能在编辑会话之外更新此类对象)解决办法
    基于rtmp+nginx 、vlc实现FFmpeg推流与wpf端拉流
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/11489814.html
Copyright © 2020-2023  润新知