CODEFORCES掉RATING记 #5

来源:互联网 发布:淘宝上的被子是真的吗 编辑:程序博客网 时间:2024/05/17 12:21

CODEFORCES掉RATING记 #5

​  比赛:Codeforces Round #429 (Div. 2)

​  时间:2017.8.1晚

  这次感觉状态不好,就去打div2了

​  A:有26种颜色的气球,每种的数量不一样,你要把这些气球分给k个人,使得每个人拿到的气球中没有两个颜色相同的。

​  直接判断每种颜色的气球是否大于k个。

​  B:有一个序列,两个人轮流决策(第一个人先):第一个人可以删掉一个元素和为奇数的子串,第二个人可以删掉一个元素和为偶数的子串。无法选的人输。问你谁能获胜。

​  可以证明,如果这个序列有至少一个奇数,那么先手获胜。否则后手获胜。证明:如果有奇数个奇数,先手可以直接选完,如果有偶数个奇数(大于1个),先手可以随便选,后手无法一次选完,先手第二次决策时可以选完。如果没有奇数,先手第一次决策时无法选择满足要求的子串。

​  C:有两个序列a,b,你要把b重新调整顺序,使得ni=1F(ai,bi)最小。F(n,k)1n中选k个数中最小元素的期望。

​  我们先推一下看看这个式子是什么:

F(n,k)=1×(n1k1)+2×(n2k1)++(nk+1)×(k1k1)(nk)

​  好像我推不出来啊。。。(结果是n+1k+1)那我就直接说结论了(可以通过观察样例猜出来):把a中最小的数与b中最小的数对齐,把a中第二小的数与b中第二小的数对齐。。。

​  D:有一个连通图,你要选出一些边使得有一些点的度数为奇数,有一些点的度数为偶数,有一些点的度数没有限制。

​  先找出这个图的一棵生成树,然后会发现非树边是没有影响的。你可以选出非树边,然后把路径上的树边反向。然后就是一个简单的树形DP了。

​  E:有一个序列,你要统计有多少个排列满足相邻两个数的积不是完全平方数。

​  我们先把每个数的完全平方的因子删掉,这样两个数的积是完全平方数就等价于两个数相同。然后DP:fi,j表示前i种数放完后有j组相邻且相同的数。转移时枚举下一种数分成几块(k)和这k块中有几块插到前面的j块中(l)。转移:

fi+1,j+ai+1kl=fi,j×(ai+11k1)×(jl)×((i1o=1ao)j+1kl)

  你没看错,时间复杂度是O(n4)的,但是能跑过去。

原创粉丝点击