【题解】牛客CSP-J入门组赛前集训营3
有趣的游戏
对于100分算法
按照题目的意思直接模拟,扫一遍数组,如果字符串有或者字符串中
的个数大于
的个数就输出
,否则输出
时间复杂度为字符串长度
幸运数字
对于20分
对于小的数据,我们很简单的可以利用去解决,
代表放了
个数字,它的和为
,余数为
。于是我们可以转移到
当
的时候统计答案。
其实这个时候我们可以用一个常见的小优化,也就是记忆化将分数提高到分。
对于100分
我们可以利用解决,
代表数码和为
,余数为
的数字个数,于是我们转移方程为
。输出
即可。
拯救地球
对于20分算法
直接对于每个任务暴力搜索
时间复杂度
对于另外20分算法
将外星生物看成每条道路的边权,将国家看成点后,我们发现边权很小,于是我们可以对于~
中的每个权值建立一张图,保证第
张图中的边在原图中的边权小于等于
.然后对于每张图都预处理出来每个点最多能拯救多少个点,于是每个任务的答案都被处理出来了.
时间复杂度
对于再另外20分算法
将任务看成询问,先让询问按照从小到大排序,然后从
出发,把
周围的边全部存进一个优先队列中,优先队列按边权从小到大排序,然后扫一遍询问,如果当前询问的
大于等于优先队列的队首,那么弹出队首,然后把这条边周围的未被标记的边标记并加入优先队列,当无法弹出队首时,此时访问过的点数就为此次询问的答案
时间复杂度
对于100分算法
将任务看成询问,我们把边和询问按照从小到大排序,然后扫一遍,扫的同时加边建图,然后用并查集维护加边操作和联通块大小
时间复杂度
兔纸的公司
题外话
我想了很多种水法,都没办法水到比较高的分数。
前几个点造的都很水,所以应该都能水到。
后面几个点我并没有想到特别好的水法,想到的一些水法也并没有办法水到分,所以出题人实在不知道该如何卡水法,加强数据,只能恭喜能水到分的同学。
题目大意
给定一棵有根树,根为 ,每个点有个权值
。
除了根之外,都有一个父节点,且最多只有一个孩子节点。
可以进行若干次这样的操作:将 减1,将
加1,然后交换
和
的权值即
,
是
的父节点。
询问最终是否有可能让这颗树形成一个大根堆,即父节点大于等于孩子节点。
对于10%的数据
只有
,那么树只有2中形态,可以分类讨论一下。
题外:抱歉QAQ,没想到一些同学辛辛苦苦写了分类讨论结果没开ll的情况,第一档数据我是卡了int的...
对于20%的数据
各种暴力爆搜乱搞
对于另外10%的数据
可以注意到在篡位的过程中是有不变量的,即 始终是不变的。
为
的深度。
对于 爬到
深度减少了,权值也减少了,
换到
深度增加了,权值也增加了。因此
始终是不变的。
那么设 。
可以发现我们可以交换树上任意两个点的 而不改变其他点的
。因为孩子与父亲换和父亲与孩子换是等价的,我们只需要将
沿
到
路径不断交换,再将
沿
到
路径不断交换,就可以实现任意两个点的交换。
既然如此,我们可以将题目看成是将 这些数填在树上。
我们将 从大到小排序,然后依次从根往下填。
但注意到虽然 满足了大根堆,但
不一定满足大根堆。
如果想让 满足大根堆,需要满足父节点的
严格大于子节点的
。
证明:
因此题目变成 将 填入树内且父节点严格大于孩子节点。
由于这个部分分满足树是一条链,因此只要 互不相同,就可以满足父节点严格大于孩子节点的条件。
因为 可以预处理出
后
暴力枚举两个数看是否相等。
对于再另外20%的数据
在上一个部分分的基础上,我们可以利用 或
在
的时间内判断是否有两个数相等。
对于剩余的50%的数据
对于不是链的情况,我们可以将最大的 填在根节点,然后把根节点删去,那么最大的
只能有一个。
删去根节点后会形成若干条链,那么 就可以有相同的数,因为可以填在两条不同的链中。
那么只要让每一条链中的数都互不相同,然后对于每一条链单独的排序一下,就可以满足题目要求。
我们可以将 离散化一下,然后记
为
在
中出现的次数。
贪心的想, 越大的要更早处理,因为越前,链的条数就更多,我们发现支链数越多,就会越优,因此我们将
从大到小排序,依次处理,维护每条链目前的剩余空位,以及链的条数。
那么我们每次贪心的将这些数放在链空位最多的链上,这个过程可以用优先队列来实现。
由于 所以总的效率是
。
std:
T1:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41573913
T2:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41573894
T3:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41573921
T4:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41574017