test0102

圣诞决斗

题意:

今天是圣诞节,Clash 和 Royale 要在圣诞树上进行决斗。

圣诞树是一棵有个结点的树,其中每个结点都属于 Clash 或 Royale 中的一人。

现在 Clash 和 Royale 轮流进行操作,Clash 先手。操作者可以选择一个度数恰好为 \(1\) 的点,将该点以及与它相邻的边删除。在 \(n\) 次操作后,剩余点的主人获胜。

你需要回答:若二人均使用最优策略,谁会获胜。

分析:

分类讨论。

  • \(n\) 为奇数,且重心为后手点。显然后手一定能使得任意时刻最大的子树小于等于其他的子树之和。那么后手必胜。
  • \(n\) 为偶数,此时重心可能有两个。如果其中至少有一个先手点,那么先手删除另外一个子树的任意一个叶子,转化成情况 \(1\),因此先手必胜。
  • \(n\) 为偶数并且重心恰有 \(2\) 个,并且都是后手点,显然将所有点分成两部分,先手取一个,后手就取另外一个,因此后手必胜。
  • \(n\) 为奇数且重心为先手点,可以把所有子树分成两类:该子树的根节点为先手点和该子树的根节点为后手点。如果此时两种子树都有,对于先手而言,肯定先选第二类;对于后手而言,肯定先选第一类。记两种子树的子树大小之和分别为 \(A,B\),容易发现先手的获胜条件也 \(A \ge B\),后手的必胜条件为 \(B<A\)
  • \(n\) 为偶数并且重心只有一个,且为后手点。容易发现这种情况与上种情况一样。

这题的核心思路是我知道你会这么想,所以我可以这样做。(滑稽

时间复杂度 \(O(Tn)\)

题意:

已知一个数列,你需要进行下面两种操作:

  1. 将所有 \(i \mod k \in [l,r]\)\(a_{i}\) 加上 \(x\)
  2. \(\sum_{i=l}^{r}a_{i}\)

分析:

简单小分块题。

显然根号分治,记 \(siz=\sqrt n\)

  • \(k \le siz\),不妨维护一个数组 \(ans_{i,j}\) 表示所有模 \(i\)\(j\) 的和,由于 \(i\) 很小,直接记个前缀和重构一下即可。

  • \(k > siz\),需要对 \(a_{ki+[l,r]}\) 加上 \(x\),需要支持 \(O(1)\) 区间修改,\(O(\sqrt n)\) 查询,一个套路的思路是分块维护差分数组,再随便推推式子即可。

时间复杂度 \(O(q \sqrt n)\)

posted @ 2024-01-02 21:30  小超手123  阅读(3)  评论(0编辑  收藏  举报