CF1190 VP 记录

A

一个小模拟.

注意到每次向前移动的位置数就是上一次丢弃的一页特殊物品的个数,于是搞个变量累加,每次把这一页的右端点求出来(注意向上取整用 ceil 会爆 int),指针扫一下即可.

B

需要一定注意力的博弈.

手玩一些样例会发现很多情况都与奇偶性有关,比如 \(1\) 堆石子或者 \(1\) 堆石子和 \(1\) 个石子. 但是并不是所有都满足,因为会出现一些无合法操作的情况.

于是整理无法操作的情况,发现且仅有以下几类:

  • 有两对以上相同的石子(初始情况).
  • 有一对石子数为 \(x\) 的石子且存在一堆石子有 \(x-1\) 个,或有一对都为 \(0\) 的石子(初始情况).
  • 所有石子从小到大排序形成形如 \(0,1,\cdots,n-1\)(可能在任何时刻出现).

前两种情况可以直接判掉,因为只有初始状态才可能出现. 而注意到如果初始没有两堆相同数量的石子,那么石子之和必然大于上述第三种情况的 \({n\times(n-1)\over2}\);另外如果石子之和小于 \({n\times(n-1)\over2}\),根据鸽巢原理一定会有至少一对相同的石子,而且必然属于上述的第一二种情况.

而当石子数之和大于 \({n\times(n-1)\over2}\) 时,只可能经过若干次操作得到上面的第三种情况,所以判断一下操作步数 \(\Big(\sum a_i\Big)-{n\times(n-1)\over2}\) 的奇偶性即可.

C

仍然是博弈,但是相比上一道更容易想到结论,实现略困难一点.

考虑双方可以对同一段反复操作,这意味着一回合没有人胜利双方就可以一直僵持,最后平局. 所以最后只用判断:

  • 先手是否存在必胜策略;
  • 无论先手怎么操作(无法胜利)后手是否都存在必胜策略.

对于前者,我采用对操作段外的 \(0\)\(1\) 个数统计,初始扫一遍最后 \(n-k\) 个数,然后考虑操作段右移,每移动一次统计最左边的增量与最右边的减量,一旦存在 \(cnt_0=n-k\) 或者 \(cnt_1=n-k\) 就存在先手的必胜策略.

对于后者,考虑任意一次操作之后都存在一种操作胜利,这意味着任意一次操作段外一定都是连续相同的数(且两段分别是 \(0/1\)). 考虑预处理出向左连续相同的 \(0/1\) 第一次出现的位置 \(l_i\) 以及向右连续相同的 \(0/1\) 第一次出现的位置 \(r_i\),每次移动端点判一下没有修改的前缀后缀是否连续即可.

D

计数 + 数据结构,最重要的是分类与去重.

特殊矩形的纵坐标只限定了一维,意味着每个(包括不同点的)纵坐标不同的矩形一定互不相同,于是我们凭此对点集分类.

纵坐标更小的矩形可能包含更多的点,于是按纵坐标从大到小排序. 考虑对纵坐标相同的做扫描线,要统计包含这个点的所有不同点集,发现只与之前出现过的不同的横坐标有关,这个东西用线段树很好维护.

考虑跨过当前横坐标 \(x_i\) 的点集个数,根据乘法原理,实际上等于离散化去重\([1,x_i]\) 中不同横坐标个数乘以 \([x_i,tot]\). 不幸的是有些情况会算重,当新加入的点横坐标并非第一次出现,且之前有点的纵坐标与这个点相同,那么同时包含这两个点的点集在这个纵坐标就算了两次. 所以当有相同纵坐标时,前面加入的点的查询范围不能包括后面要加的点,也就是说前面排序时不仅纵坐标更大为第一关键字,横坐标也要钦定一个顺序作为第二关键字.

E

计算几何 + 贪心 + 倍增 + 二分答案,除了初始的转化比较难想其它都比较自然.

有点会了,待补.

F

非常困难的数论,用到了原根还有很多一些神秘经典结论,以及很多情况需要分讨.

前面的区域以后再来探索吧!

posted @ 2025-07-09 22:01  Ydoc770  阅读(9)  评论(0)    收藏  举报