下笔春蚕食叶声。

AtCoder Regular Contest 131 (A-E)

直通车

有的人,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)\) 即可。
并不详细的揭秘 这次不是钓鱼
posted @ 2022-04-07 18:38  ACwisher  阅读(69)  评论(0编辑  收藏  举报