zoukankan      html  css  js  c++  java
  • CCPC 2020 威海站

    gym 102798。
    写了几个签到题,躺的很舒服。

    A.Golden Spirit

    无论怎样,一定可以先送完第一轮,即把每个人都送到对面去。

    接下来只会有两种决策,一种是等到当前我所在这一侧至少有一个人休息好了开始送第二轮,另一种是先走到对岸,再等到有人休息好了开始送第二轮(因为对岸有人休息好的时间更早),取较优的解即可。

    这是因为第一轮送的时候每个人开始休息的时间差了一个 (x) ,在第二轮中花费时间 (x) 送完一个人之后,对岸也一定会有一个人休息好了,于是可能出现差异的地方就只有从哪一侧开始送第二轮。

    code

    B.Labyrinth

    如果起点终点围成的矩形里面没有障碍,答案就是曼哈顿距离。
    否则如果受到障碍阻拦,那么贴着障碍走是最优的,以每个与障碍相邻的格子为起点 bfs 一下就行了。

    第一次写开了 160 * 200000 的数组,把电脑卡死了。想了一下,发现先把询问离线下来就可以了。
    code

    C.Rencontre

    如果给定树上的三个点,不难发现汇集在一点的最小距离和就是两两之间距离之和的一半。
    于是根据期望的线性性统计每条边的贡献就行了。

    好久没写题,第一次写的时候开边表都忘记大小要 *2 了。
    code

    D.ABC Conjecture

    如果 (c) 没有平方因子,那么显然 (rad(abc)ge rad(c)=c) ,无解。
    否则可令 (c=p^2d,a=pd,b=p(p-1)d) ,则 (rad(abc)=rad(p(p-1)d)le p(p-1)d<c) ,有解。

    于是有解的充要条件是 (c) 有平方因子。枚举 (sqrt [3]{c}) 以内的数尝试对 (c) 分解,如果剩下的数 (>1) ,则它只可能是素数或者两个素数之积,再判断一下它是否为完全平方数即可。也可以直接用 Pollard-Rho 解决。

    code

    G.Caesar Cipher

    考虑用线段树维护字符串的哈希值,由于每次只 (+1) ,所以所有位置取模的次数之和是 (O(frac {nq} P)) 的。

    线段树的每个节点记录一下区间哈希值以及区间内 (a_i) 的最大值,修改时如果遇到 (max a_i=P-1) 的节点,就递归下去暴力处理,否则整体修改哈希值即可。

    自然溢出会被卡,用双哈希比较稳健。

    code

    H.Message Bomb

    给每个集合记录一下总信息条数,一个人加入某个集合时,将他的答案减去这个集合当前已有的信息数目,一个人离开某个集合时,将他的答案加上这个集合当前已有的信息数目。
    最后把每个人还没离开的集合的贡献加上去就行了。
    code

    J.Steins Game

    黑白石子之间互不影响,所有黑色石子是一个游戏,其 SG 值与每堆白色棋子的 SG 值的异或就是全局的 SG 值。

    打了个表观察黑色石子的 SG 值,和源哥,ldx 讨论后发现这个 SG 值就是 最少的那一堆的数目 - (有几堆是最少的 + [每堆都是最少的]) % 2 。

    于是把所有石子堆排序,从大到小枚举黑色石子中最少的那一堆的数目以及有几堆是最少的,对当前可能成为白色的石子堆维护一个线性基就行了。
    code

    L.Clock Master

    这个答案就是拆出来的所有数的 LCM ,于是只会用到质数的幂,多余的可以用 1 凑上,做一个背包就行了。
    code

  • 相关阅读:
    《深入理解java虚拟机》第二章:Java内存区域与内存溢出异常-20210716
    mongodb 占用内存及解决方法
    JDK常用分析工具
    mysql表碎片清理和表空间收缩
    Java Array 和 String 的转换
    Discourse 如何查看自己发布的主题
    Discourse 用户的邮件无法投递的时候如何处理
    IntelliJ IDEA 如何在 Java 中进行快速注释
    Java Arrays.asList 和 new ArrayList(Arrays.asList()) 的对比
    Druid 加载 Kafka 流数据的 索引属性(IndexSpec)
  • 原文地址:https://www.cnblogs.com/jklover/p/14876806.html
Copyright © 2011-2022 走看看