ZR21秋季noip10连测

不摆烂了,开始订正

Day 1

http://zhengruioi.com/contest/967

A

幂函数是完全积性函数,做完了
code

B

观察第二个样例发现是 n ! n! n!
考虑倒着插入每一个点,如果不是叶子结点,那么可放置到位置+1,不然-1
倒过来做即可
code

C

在这里插入图片描述

姑且是按照题解把代码写了,但还不是特别明白,先mark一下

code

D

博弈论题

设异或和为 s s s,如果为0,显然平局

否则胜负肯定是在 s s s的最高位上区分出来的这一位一定有奇数个1

什么意思呢,就是把如果原数这一位为1,那么就设成1,否则为0
然后这个01串肯定是有奇数个1的

那么对于这个串,要么奇数位有奇数个一,要么偶数位有奇数个一
如果n为偶数,可以发现开头和结尾分别对应着奇数位和偶数位,即先手是可以决定后手下一次选的是原数列的奇数位还是偶数位
如先手拿走了一个奇数位的,那么后手拿的开头和结尾的都是原数列偶数位的数

所以当 n n n为偶数时,先手必胜

那么对于 n n n为奇数的情况下,如果开头和结尾都是0,那么先手随便选一个,必定会转换场上面那种情况,即如果开头结尾是0,先手必败

如果开头是1(或结尾,无所谓),在剩下那个序列中,如果开头结尾不同,如果后手取了其中一个,那么先手必不可能取另外一个
在这里插入图片描述

所以先手一定不会干这种蠢事,所以先手一定每次都取和后手一样的数,这样才可能胜

那么再考虑,如果后面那段1的个数不是4的倍数,那么平分完之后一定各获得奇数个1,先手再加上一开始拿的那个1,必败

也就是说,n为奇数 如果删掉开头(或结尾)的1后,剩下的数1的个数必须事4的倍数
此外,还必须满足不管后手怎么取,先手都可以取到和后手一样的数字

考虑这个序列长啥样,容易发现,每次两端的一定是相等的,删掉两端对应相等的之后,中间那一段一定是相邻两个是相等的
然后按照这个判断即可

code

Day 2

http://zhengruioi.com/contest/975

C

不会

D

考虑把上面一层提起来,然后发现可以变成一个立体的东西,发现最终只和最上面那层相关

先预处理出来下面的方案数 g [ i ] [ j ] g[i][j] g[i][j]表示第一行已经填 i i i个,第二行填了 j j j个,剩下填完的方案数
转移就很简单

然后再考虑DP最上面那一层的
f [ i ] [ j ] 表 示 第 一 行 选 了 i 个 点 , 第 二 行 选 了 j 个 点 f[i][j]表示第一行选了i个点,第二行选了j个点 f[i][j]ij
如果是放第一行,那么直接放即可
如果是放第二行,当 i > j + 1 i>j+1 i>j+1时说明 j + 1 j+1 j+1下面挂着的那个全都可以选,直接用插板法算即可
否则当 i = = j + 1 i==j+1 i==j+1,选完第二行之后下一个一定是选第一行,那么可能在选第一行之前先把下面挂着的第一列选了若干个,再枚举一个 k k k,乘上 g [ k ] [ 0 ] g[k][0] g[k][0]
dp即可
时间复杂度 O ( n 2 ) O(n^2) O(n2)

code

Day 3

http://zhengruioi.com/contest/981
阴间场

B

考虑 d p [ i ] [ j ] dp[i][j] dp[i][j]表示第 i i i秒,在第 j j j个位置的最小代价
用线段树维护转移

  • 不动
    d p [ i − 1 ] [ j ] − > d p [ i ] [ j ] dp[i-1][j]->dp[i][j] dp[i1][j]>dp[i][j],保留原来线段树
  • d p [ i − 1 ] [ x ] + a ( x − y ) − > d p [ i ] [ y ] dp[i-1][x]+a(x-y)->dp[i][y] dp[i1][x]+a(xy)>dp[i][y] 线段树维护 d p [ i ] [ x ] + a x dp[i][x]+ax dp[i][x]+ax最值即可
  • 另外一个方向同理
    然后把不合法的地方毙掉

线段树维护区间最值和区间覆盖即可

code

Day 4

http://zhengruioi.com/contest/989

B

考场上被yyc指导了一波,结果被卡常卡成了暴力,很难受
首先一眼看出来是区间dp
考虑二分,变成一个判断性的问题

转移很简单,用bitset优化即可

D

分析后可以写出转移方程
d p [ i ] + = d p [ j ] dp[i]+=dp[j] dp[i]+=dp[j]
当且仅当不存在一个 j < k < = i j<k<=i j<k<=i使得分开后左边的值全部小于右边的值

Day5

http://zhengruioi.com/contest/1004

A

相邻两个一定不会都操作,二分答案大力贪心即可

Day 6

http://zhengruioi.com/contest/1014

A

数学题,难度不大,推一下式子即可

B

考虑连出了一个三角形,那么中间那个点就没用了

如果中间那个颜色只剩下一个了,那么它不能被删掉,把它和其他的相连
否则删掉之后就变成了 n − 1 n-1 n1边形,递归计算即可

code

Day 9

http://zhengruioi.com/contest/1035

NB dengls场

A

矩阵乘法入门题
然而考场上推了半天EGF
code

B

倒过来做,考虑每个位置最终会在那个位置,很方便

当然为了复习平衡树重新打了一遍Splay
code

D

NB题

首先容易发现题目要求的就是 ∑ x x + a i \sum\frac{x}{x+a_i} x+aix

第一步是把这个式子转换,
先考虑 x > a i x>a_i x>ai的情况

换元 x x + a i = 1 1 + a i x \large \frac{x}{x+a_i}=\frac{1}{1+\frac{a_i}{x}} x+aix=1+xai1变成

1 1 + y \large \frac{1}{1+y} 1+y1 0 < y < 1 0<y<1 0<y<1

然后我们回想一下泰勒展开的公式

f ( x ) = f ( x 0 ) 0 ! + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . . f(x)=\frac{f(x_0)}{0!}+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+.... f(x)=0!f(x0)+1!f(x0)(xx0)+2!f(x0)(xx0)2+....

然后考虑展开 1 1 + x \large \frac{1}{1+x} 1+x1

先考虑后面的 ( x − x 0 ) i (x-x_0)^i (xx0)i直接用组合数 = ∑ j ( i j ) x j x 0 i − j \large = \sum_j \binom{i}{j} x^j x_0^{i-j} =j(ji)xjx0ij

因为 0 < x < 1 0<x<1 0<x<1所以我们在 x 0 = 1 2 x_0=\frac{1}{2} x0=21处展开

然后看前面的 f ( i ) ( x 0 ) i ! \large \frac{f^{(i)}(x_0)}{i!} i!f(i)(x0)
因为 ( 1 1 + x ) ( i ) = ( − 1 ) i i ! 1 ( 1 + x ) i + 1 (\frac{1}{1+x}) ^{(i)}=(-1)^ii!\frac{1}{(1+x)^{i+1}} (1+x1)(i)=(1)ii!(1+x)i+11

阶乘约掉了,所以也很好算

因为具有线性性,把对应项的系数加起来即可

然后我们考虑维护这个展开的公式,

a i a_i ai排个序,然后一个插入
插入相当于是把换了的元换回去

即让 k x j kx^j kxj变成 k a i j x j ka_i^jx^j kaijxj

这样就处理完了 x > a i x>a_i x>ai的情况

然后我们来考虑 x < a i x<a_i x<ai的情况

x x + a i = x a i x a i + 1 = 1 − 1 x a i + 1 \frac{x}{x+a_i}=\frac{\frac{x}{a_i}}{\frac{x}{a_i}+1}=1-\frac{1}{\frac{x}{a_i}+1} x+aix=aix+1aix=1aix+11

右边换个又变成了 1 1 + y \frac{1}{1+y} 1+y1类似维护即可

具体细节可以看代码

code

posted @ 2021-09-12 13:49  lahlah  阅读(79)  评论(0编辑  收藏  举报