atcoder

[========]

[AGC012E] Camel and Oases

总结:

  1. \(\frac{V}{2}\) 的操作只会进行 \(O(\log V)\) 次。状压左右两边用了哪些 \(V\) 就行了。
  2. 正难则反,发现对于每个点都往两边 \(dp\) 复杂度有 \(O(nV\log V)\) 所以考虑从两边 \(dp\) , 然后通过合并 \(dp\) 数组来得到哪些点可行, 复杂度变为 \(O(V \log V)\)

[AGC013D] Piling Up

做题思路:

  1. 看到只有黑白两种颜色的球,而且操作是取球和放球,可以想到格路计数。
  2. 如果 \(n \geq m\) 那显然可以随便走,所以只用考虑 \(n < m\)
  3. 考虑两种思路:(1) 先用开始给的球,(2) 球不够时再用开始给的球。发现 (2) 更简单一点。
  4. 转化操作,先取一个球,然后放两个,然后取两个,然后放两个,然后取两个...,最后放两个取一个。
  5. 3 好像错了,我应该先枚举一开始有多少个白球,多少个黑球。
  6. 容斥,按第一次越界来容斥。
  7. 好像全想错了,可以看出黑球数+1,黑球数-1,黑球数不变,走 \(m\) 步。
  8. 看题解。

总结:

  1. 看到只有黑白两种颜色的球,而且操作是取球和放球,可以想到格路计数。
  2. 计数题,如果一种方案被多次计算,可以只在最小值处统计它,这样就可以避免算重

[AGC015D] A or...or B Problem

总结:

自己想不出来,看了下题解发现真简单。

:

1ll<<n -> 1<<n

[AGC013F] Two Faced Cards

总结:

  1. 给定两个长度为 \(n\) 的序列 \(A, B\) ,判断能否将 \(A, B\) 任意排列,使得最后对于任意的 \(i\) 均有 \(a_i \geq b_i\) 被满足。显然可以对 \(A\)\(B\) 从小到大排序后依次检查,但是还有一个做法。令数组 \(s\) 初始为全 \(0\) , 对于每个 \(a_i\) , 将 \(s[1],s[2]...s[a_i]\) 全部加 \(1\) ,对于每个 \(b_i\) , 将 \(s[1],s[2]...s[b_i]\) 全部减 \(1\) 。最终 \(s\) 数组中的每个元素必须都大于等于 \(0\) 。这样的好处在于如果要改变某个 \(a_i\) 或改变某个 \(b_i\) 只需要做区间加就行了。
  2. 重温一下,给定一下线段 \([l,r]\) 用最少的线段覆盖 \([1, n]\) ,问最少用多少条线段。先把所有线段按 \(l\) 排序,从 \(1\)\(n\) 枚举下标,把左端点下标为 \(i\) 的线段加入堆里(以 \(r\) 为键值的大根堆),如果当前位置还没被覆盖,把堆顶取出来覆盖就行了。

[AGC018F] Two Trees

很妙的欧拉回路题。

如果一个点在 \(a, b\) 两棵树中度数不同,那么一定无解。否则把两棵树的根连边,然后如果一个点的度数为奇数,就将两棵树中的这个点连边,然后跑欧拉回路。如果欧拉回路中从 \(a\) 走到 \(b\) , 那么这个点就是 1, 如果从 \(b\) 走到 \(a\) , 那么这个点就是 \(-1\) .

总结:

  1. 这种给图上的点定权值的题,可以考虑欧拉回路。
  2. 利用每个点只有一个父亲的性质,发现只有在欧拉回路经过父亲边时,这个点的子树会 +1/-1. 这样就保证了每个点的子树和为 1/-1.
posted @ 2022-11-27 20:54  youwike  阅读(53)  评论(0)    收藏  举报