ZR21秋季noip10连测
不摆烂了,开始订正
Day 1
http://zhengruioi.com/contest/967
A
幂函数是完全积性函数,做完了
code
B
观察第二个样例发现是
n
!
n!
n!
考虑倒着插入每一个点,如果不是叶子结点,那么可放置到位置+1,不然-1
倒过来做即可
code
C
姑且是按照题解把代码写了,但还不是特别明白,先mark一下
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的倍数
此外,还必须满足不管后手怎么取,先手都可以取到和后手一样的数字
考虑这个序列长啥样,容易发现,每次两端的一定是相等的,删掉两端对应相等的之后,中间那一段一定是相邻两个是相等的
然后按照这个判断即可
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]表示第一行选了i个点,第二行选了j个点
如果是放第一行,那么直接放即可
如果是放第二行,当
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)
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[i−1][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[i−1][x]+a(x−y)−>dp[i][y] 线段树维护 d p [ i ] [ x ] + a x dp[i][x]+ax dp[i][x]+ax最值即可
- 另外一个方向同理
然后把不合法的地方毙掉
线段树维护区间最值和区间覆盖即可
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
n−1边形,递归计算即可
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)(x−x0)+2!f′′(x0)(x−x0)2+....
然后考虑展开 1 1 + x \large \frac{1}{1+x} 1+x1
先考虑后面的 ( x − x 0 ) i (x-x_0)^i (x−x0)i直接用组合数 = ∑ j ( i j ) x j x 0 i − j \large = \sum_j \binom{i}{j} x^j x_0^{i-j} =∑j(ji)xjx0i−j
因为 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=1−aix+11
右边换个又变成了 1 1 + y \frac{1}{1+y} 1+y1类似维护即可
具体细节可以看代码