2020.12.01【NOIP提高B组】模拟 总结
1.瑰丽华尔兹
打了50分 d p dp dp,感觉样例的图给错了( 2 2 2不是向下吗?),答案是对的。
然后怕空间挂,有滚动了一下。
正解可能就是一段一段考虑,我反正不会。
正解:
果然如此。
设
f
i
,
j
,
k
f_{i,j,k}
fi,j,k
表示第
i
i
i段在
(
j
,
k
)
(j,k)
(j,k)位置的最大格子数。
然后暴力转移,可以卡过(不要滚动数组)。
如果数据加强要单调队列优化。
2.Heatwave
暴力 s p f a spfa spfa。对于每个点都做一遍。
正解可能是缩点 t a r j a n tarjan tarjan,想到了,但是没时间打了。
比赛时想多了,结果数据似乎卡了 s p f a spfa spfa,挂了8.3分。
正解:
发现最小生成树最优。
所以建出来最小生成树。
然后倍增一下。
设
f
i
,
j
f_{i,j}
fi,j
表示
i
i
i结点向上
2
j
2^j
2j
级祖先,
g
i
,
j
g_{i,j}
gi,j
表示
i
i
i结点向上
2
j
2^j
2j
级祖先经过路程最大值。
倍增+ l c a lca lca就过了。
3.Count
一开始看到平均数直接用逆元做。
然后后面发现 f ( x ) f(x) f(x)一定是整数。
然后就发现当 x > 1 , f ( x ) = x x>1,f(x)=x x>1,f(x)=x。
不会证明。
可能与欧拉函数有关。
然后想了一堆方法也没有成功。
时间复杂度还是 O ( r ) O(r) O(r)。
正解可能是发现
f
(
x
)
k
f(x)^k
f(x)k
就与
f
(
x
)
f(x)
f(x)的某个幂同余,然后直接用等差数列公式做。
或者是玄学的组合数算法?
应该是数学。
以后得补数学。
正解:
拉格朗日插值,虽然我也不会,看着公式打了一下就过了。
首先证明显然,就用当
(
x
,
y
)
=
1
(x,y)=1
(x,y)=1,有
(
y
−
x
,
x
)
=
1
(y-x,x)=1
(y−x,x)=1(
(
a
,
b
)
(a,b)
(a,b)表示
a
,
b
a,b
a,b的最大公因数),然后两两配对。
然后对于就分
1
1
1到
l
−
1
l-1
l−1和
1
1
1到
r
r
r计算再相减。
因为
f
(
x
)
=
x
(
x
>
1
)
f(x)=x(x>1)
f(x)=x(x>1),所以考虑
2
+
∑
i
=
2
r
i
k
2+\sum_{i=2}^r{i^k}
2+i=2∑rik
用拉格朗日插值做。
设
F
i
F_i
Fi
表示当
r
=
i
r=i
r=i时的答案。
先预处理好 1 ≤ i ≤ k + 2 1\leq i\leq k+2 1≤i≤k+2的情况
然后就有拉格朗日插值:
F
x
=
∑
i
=
1
k
+
2
F
i
×
∏
j
=
1
,
j
≠
i
k
+
2
x
−
j
∏
j
=
1
,
j
≠
i
k
+
2
i
−
j
F_x=\sum_{i=1}^{k+2}{F_i\times\frac{\prod_{j=1,j\not=i}^{k+2}{x-j}}{\prod_{j=1,j\not=i}^{k+2}{i-j}}}
Fx=i=1∑k+2Fi×∏j=1,j=ik+2i−j∏j=1,j=ik+2x−j
这样暴力算时60分。
把前几项 i i i的分数列出来,发现除了一些东西又乘了一些东西,所以边做边搞。
注意算逆元时如果 i − j i-j i−j为负数,让 i − j + m o d i-j+mod i−j+mod在模上 m o d mod mod。
结果90分被卡常。
把加法再模换成判断与模数的大小关系,用减法。
再用 r e g i s t e r register register就行了。
4.君と彼女の恋
感觉是组合数。
可以发现序列长度一定小于等于 m m m,用抽屉原理证明。
然后就推不下去。
本来还想 d p dp dp,结果 d p dp dp怎么判断是否余数相同呢?
打了暴力 d f s dfs dfs,20分。
正解:
发现 m m m很小,所以 d p dp dp时只要处理模数然后乘以方案数。
然后就不会了。
组合数也讲了很久。
5.闲话
A组。。。。
第一题没看懂????
第二题数据结构???
第三题推公式????
第四题构造题?什么鬼。
表示一题不会。
6.总结
应该可以上100。
只要T1不挂即可。
最后98.3分。
初一第2。
挂了。
第一题50。
第二题8.3。
第三题20。
第四题20。