竞赛讨论区 > 【题解】牛客CSP-J入门组赛前集训营5
头像
henry_y
编辑于 2019-11-08 12:00
+ 关注

【题解】牛客CSP-J入门组赛前集训营5

字符统计

直接统计每个字符的出现次数。注意读入需要读入到EOF。
输出按照字典序的限制只需要先求出最大出现次数然后顺序考虑26个小写字母即可。

填数游戏

10%

爆搜答案即可。

另外30%

意味着每个数都要填到格子里,那么有一个很直观的贪心想法,大的数匹配大的数,小的数匹配小的数就可以使答案最大了。

50%

主要要意是鼓励选手思考比较简单的做法。
出题人在检验算法正确性时写了一个的前缀max优化dp做法。这个做法可以拿到50分但是实现难度与csp-j T2难度不匹配。

100%

考虑另外30%的贪心。但是因为有一些数可以不选的,所以可以把数分为大于0和小于0的。
首先肯定是负数和负数匹配,正数和正数匹配。然后余下的数按照大的和大的匹配,小的和小的匹配的原则匹配即可。
复杂度
注意开long long。
发现这个很显然的贪心匹配结论坑了很多人......导致B的AC人数甚至比C还少,大家还是不够细心啊(x

夹道之樱题解

一点微薄的歉意:这道题有一些人写了错误的贪心拿到了很高的分数(多人90分),我在比赛前并没有过多地注意水法,比赛过程中虽然注意到了这个问题但并没有想出很好的方法将它卡掉,对此我向大家道歉。
不过欢迎大家提供hack数据,实在卡不掉就放掉吧,毕竟骗分也是csp选手的必备素质(手动滑稽)。

对于30%的数据

直接暴力搜索所有简单路径,求出经过步道美观度的最小值和最大值,更新答案即可。
时间复杂度

对于60%的数据

考虑固定美观度最大值和最小值,对美观度在之间的边建立新图,如果在新图中点与点连通,那么美观度最小值和最大值的差值就可以小于或等于,因此我们把边按照美观度排序,对于每个区间判断是否存在路径,同时更新答案。
时间复杂度

对于100%的数据

考虑只固定美观度最大值,按照上面的方法建图,点与点的连通性明显具有单调性,可以二分找出最大的能使点连通的,因此我们把上面的枚举改为枚举,并二分得到,同时更新答案。
时间复杂度
除此之外,我们也可以采用并查集,在固定,从大到小扫描的同时在线维护点之间的连通性。
时间复杂度

终焉之理题解

下面我们把这柱子看成一个序列,序列中的元素是柱子的高度,每次从左到右对每个长度为的区间排序。

对于30%的数据

暴力模拟题目中的操作,在每一轮中直接从左到右扫描每个区间,暴力将每个区间排序。
这个算法的时间复杂度看似是的,但经过后面的可以发现其实这个算法的时间复杂度为

对于50%的数据

我们猜测当较大时,操作轮数很小。
其实我们不必在每一轮中对所有区间排序,观察每轮从左到右扫描的过程,假设当前将要排序区间的左端点为,那么这次排序影响的元素在区间内,它会把区间的最小值固定在位置上,然后右移待排序区间的时候会把第位置上的元素纳入排序的影响范围。
因此我们可以在每轮扫描的时候,用一个小根堆维护当前排序影响的元素,每次弹出最小的元素放入序列,然后选取后面第个元素加入堆内。
时间复杂度

对于100%的数据

仔细观察可以发现,每***作后,每个元素左边的比它大的最大的个元素会移到它的右边,那么我们用树状数组统计每个元素左边比它大的元素个数,那么就是答案。
其实我们还有一个更加简单的做法,我们无需用树状数组统计这类元素的数量,直接将元素排序,若一个元素左移,它位置的偏移量就是它左边比它大的元素个数。这个做法的正确性是显然的,按照上面的方法计算答案同样能解决问题。
第二个做法出题人在出题的时候并没有想到,结果似乎高估了这道题的难度?感觉作为一个出题人真失败。。。
时间复杂度

std

A:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41630435
B:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41630446
C:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41632646
D:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41632647

全部评论

(3) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐