【题解】牛客挑战赛35

T1:考虑用你手上最小的牌去碰对面最大的,次小的碰次大的……以此类推。
证明如下:
令你的初始总分为你手上的牌的点数和减去对面的点数和。每次当你的牌小于对面的牌时,你将获得的分数。不难发现这个问题与原问题等价。
现在假设在游戏过程中,你有次出牌小于对面的,显然为了最大化分数我们应该选你的最小张碰对面最大张。当不断增加时,若你的小牌小于对面的大牌,则你的分数会增加。模拟这个过程计算即可.

T2:对每个联通块分别考虑。如果这个联通块是一条链,则最后收缩至.如果是一个环,则点数不变。如果是一个拥有四个点的菊花图,答案是.其他情况均发散至正无穷。对每个联通块求和即可。

T3:令表示长度为i的置换的循环节个数总和,则,可以线性求出。
现在考虑钦定置换的前位和给定置换相同,第位比给定置换大,后面随意(显然字典序更大)。则我们考虑建立对应的有向图,一个循环节对应有向图中的一个环。已经成环的那些点可以直接计入答案。设未成环的链共条,则可以将每条链等效为一个点,并将计入答案。使用并查集维护该有向图,树状数组优化枚举位的值的过程即可。

T4:将串不断执行操作,直到串消失,所得到的一系列串构成的集合记作。将中的每个串逐位翻转(不删去前导零)后构成的集合记作。则是好的串,当且仅当可以通过中的串拼接而成。使用DP判断即可。

T5:真实良心送分题。将所有需要用到的(为添加的边的端点或者所求最短路起始/终止点)拉出来建虚树构图,最后跑最短路计算答案(std写的spfa哈哈哈哈哈哈)。

T6:令为一个多项式的值表示当取值为x时,满足前面所有限制的概率。可以证明是一个段数在级别的分段多项式(通过维护可证)。最后答案就是
我们可以得到。转移的时候枚举的所有段进行计算。

全部评论
T5 std 写 spfa 感觉不太应该呀...,很容易构造出让 spfa TLE 的数据。
2 回复 分享
发布于 2019-12-21 00:37
F题能写详细点吗?表示看不懂QAQ
点赞 回复 分享
发布于 2019-12-20 22:54
D题 1 100 100011 这组数据是输出NO还是YES
点赞 回复 分享
发布于 2019-12-20 23:45
木得标程?
点赞 回复 分享
发布于 2019-12-21 08:24
没有题解代码吗
点赞 回复 分享
发布于 2019-12-21 12:39

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务