• AtCoder Regular Contest 131 (AE)


    直通车

    有的人,vp了一场 tyh 30分钟切掉三题的ARC,补题补到E 用了三天是怎么一回事呢,小编也很好奇

    详细揭秘

    留个 悬念

    A

    答案可以是 \(y*1000000000/2+x\) 这样就不会相互影响。

    B

    一个格子相邻的只有四个格子,而我们有五种颜色,直接扫一遍每次随便选一个能填。

    C

    题意:\(n\) 个互不相同的非零的数,A、B轮流取一个,取完xor和为0者赢。问你先手是否必胜。
    题解:
    和之前模拟赛的一道题非常像,都是讨论下奇偶,但那题是拿完后 xor和是0 的输

    • 如果 \(n\) 是奇数,那么游戏必定在奇数次操作后结束(先手必胜)。

      Proof
      即证,游戏不会在偶数次操作后结束。
      即证,游戏不会在2次后结束,因为2次后再次达到奇数局面。
      如果2次后奇数,也就是后手胜,就说明取的 \(x\)\(y\) 满足 \(x\xor y=0\),因为互不相同,所以一对,一对的,最后也会剩下一个没人匹配的。先手取那个就无敌了。

    • 如果 \(n\) 是偶数,那么先手第一步要是不赢,后手就会变成一个奇数个数的游戏的先手,它必胜,所以先手第一步必须赢。

    那么就做完了。

    D

    先来三个结论:

    • 让箭与箭距离为 \(D\),让中间的那根属于 \([-D,D]\),是最优的。
    • 因为是对称的,所以中间那根属于 \([0,D]\) 就是最优的。注意是(n+2)/2,否则会错。
    • 枚举中间那根的位置的时候,它肯定是在整数位置上的。小数位置没啥意义。

    问题在于,直接枚举是 \(O(ND)\) 的,我们考虑如何在 \(O(N+D)\) 的时间内计算出中间那根位于 \([0,D]\) 的所有位置的答案。
    \(st\) 是 中间那根位于0时最左边那根的位置。\(delta\) 是中间那根现在的位置。
    \(l\le st+delta+kD \le r\) (边界预处理的时候搞到能取等)。\(k\in [0,D),delta\in [0,D]\) 要求对于 \([l,r]\) 的合法 \(k\) 的个数
    $\frac {l-st-delta} D \le k \le \frac {r-st-delta} D $

    \(\lceil \frac {l-st-delta} {D} \rceil \le k \le \lfloor \frac {r-st-delta} {D} \rfloor\)

    由于 \(delta\in [0,D]\)
    所以对于 一段区间,\(k\) 的个数,会在至多两个位置变动1,那么我们可以维护一个答案的差分数组,最后前缀和一下就行了。
    写起来非常恶心。。。可能是因为我不太擅长处理这种东东。。

    E

    可以爬山。

    下面考虑其他做法。
    对于每个 \(i\),我们钦定 \((1,i),(2,i)...,(i-1,i)\) 都是某种相同的颜色,可以保证没有异色环。
    也就说,我们能够将 \(1,2,...,n-1\) 分成和相等的三组。
    如果我们在完全图的总边数是 \(3\) 的倍数的时候都能找到解(3,4,5除外,他们都必定没有解),那这肯定是正确做法了。(也就是要求 \(n\bmod 3 \neq 2\) 时都有解)这个之后数学构造的方法可以证明。

    我们有三种做法:

    • 动态规划:我们可以写一个 \(O(n^5)\) 的dp。状态 \(dp[i][sum1][sum2]\)\(i\) 个,第一组大小,第二组大小。
    • 随机:实际上 \(s\) 相等的三组个数在 \(n\le 50\) 时密度非常大,随机每个 \(i\) 给哪种颜色就能过。不懂。大受震撼。
    • 数学构造:
      • \(n=3:\) 显然无解
      • \(n=4:\) 样例就是,无解
      • \(n=5:\)边数不是4的倍数

      • \(n=6:(1,4),(2,3),(5)\)
      • \(n=7:(1,6),(2,5),(4,3)\)
      • \(n=8:\)边数不是3的倍数
      • \(n=9:(1,2,3,6),(5,7),(4,8)\)
      • \(n=10:(1,2,3,4,5),(7,8),(6,9)\)
      • \(n=11:\)边数不是3的倍数
        现在我们只要能把 \(n\)\(n-6\) 转移过来,那就能够给出所有边数是3的图的解了。
        分别在三组里加入 \((n-1,n-6),(n-2,n-5),(n-3,n-4)\) 即可。
    并不详细的揭秘 这次不是钓鱼
  • 相关阅读:
    saltstack(master迁移)
    saltstack(主机改名)
    saltstack-部署
    redis部署
    lvs+keepalived
    android适应屏幕
    Android 网络编程
    使用pdb调试python
    python zookeeper 学习笔记
    Python 守护进程
  • 原文地址:https://www.cnblogs.com/zdsrs060330/p/16112777.html
Copyright © 2020-2023  润新知