[关闭]
@SovietPower 2018-12-30T12:28:47.000000Z 字数 2229 阅读 1131

Day8~ Test

正睿OI



Day1

A


  考虑两个数异或怎么会得到1:,也就是同一位的两个1会抵消成0。那么令表示的二进制1的个数,如果计算只奇偶性,。因为如果有变成0的1也一定是两个一起变成0。那么如果令表示区间为偶数的的个数,表示区间中为奇数的的个数,该区间的答案为
  计算,可以数位DP。,考虑中的怎么求。对于一个偶数一定与奇偶性相反。于是我们这样分组:奇偶性是这样的:可得:


  对于区间的处理,:把端点离散化,这样把所有区间分成了若干段小区间,每段区间是若干段小区间的并。这样每有一段区间,直接去找属于它的区间即可。如图:
  :建一棵值域的线段树,动态开点(能覆盖大区间就直接覆盖,否则递归新建左/右区间节点)。

B


  

C


  

Day2

A


  计算覆盖的格子,如果不考虑交叉,单独算主对角线(向右斜的统称主对角线了)与副对角线(所有向左斜的)的话很容易。那先算出这个的答案。
  考虑主次对角线交叉的部分,我们枚举每条次对角线,看它与哪些主对角线有交点,这是一个区间,那么好像可以二分。
  而如果以x=y这条对角线为边界的话,确实可以二分两次来确定这个区间。
  但是交点是指在格点上相交。这相当于两条直线的交点有整数解。但是可以发现每相邻两条副对角线,它们在格点上有交点的主对角线是正好互斥的。
  再观察下,然后可以分奇偶性,求前缀和就行了。

  但是不需要二分,因为我们可以O(1)计算出区间位置,然后前缀和。
  分奇偶性的话前缀和从i-2转移就行了。把坐标系旋转45°找规律会更方便些。

B


  有一个只有一条边有权值的部分分,对于某种位置分布情况,我们肯定是在这条边两侧尽量配对。
  这样扩展到每一条边,如果它两边能配对,我们应尽量让两边的配对,多走这条边的路,即一定会增加。
  那么我们可以对每一条边计算其贡献。枚举它一边男女生人数就可以得到所有情况。设它某一边连通块点数为,则边的贡献为:


  把前面只与有关的放到前面,枚举边:

  这样就只与有关了,预处理所有边在的贡献。复杂度

C


  

Day3

A


  

B


  一个环删掉一段,剩下的一段也是连续的。它当中不含有相邻的相同字符。如果原串中存在相邻的相同字符,则在这里把环切开,最后会把环切若干段,合法的剩下的段显然是某一段的一部分。
  然后判断在合法的段中是否有长的合法长度(若存在,则删个是可以的),即长首尾字母不同的段。而再删一段后首尾字母相同就是一段前后缀相同。判断前后缀是否相同可以直接用KMP/Hash。如果有长为的相同前后缀长度,则位置是非法的。拆环为链每次只删后缀就是正确的了。
  如果不存在相邻的相同字符,把整个串求一遍就行了。

C


  

Day4

A


  

B


  

C


  


  
  
  

Day5

A


  

B


  

C


  

Day6

A


  

B


  

C


  

Day7

A


  

B


  

C


  

Day8

A


  

B


  

C


  

Day9

A


  

B


  

C


  

Day10

A


  

B


  

C


  

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注