据说这次过了下轮就不能参加了呢,遗憾…查重结束, 可以贴代码出来了.
A. Country Leader
选领导人,名字里面字母种类多的当选,如果有多人名字种类一样多,则选名字字典序靠前的.给你$N$个名字$N ≤ 100$,问那个人会当选.所有的名字只有大写字母,长度不超过$20$,大数据的名字会有空格.
这题就把名字一行一行读进来,统计每个名字的字符种类.对名字排序以后找第一个字符种类最多的就行了.
1 | //省略头文件 |
B. Rain
给一块$R × C$的板子,有$R × C$个格子,每个格子有个高度$H[i][j]$,现在往里面灌水,问他能蓄多少水(有些格子四周都比他高,那这个格子就能蓄水).
这题其实就枚举每个格子,这个位置的蓄水高度等于从他为起点,板子外面为终点的所有路径中,经过的最高格子最小的那条路径经过的最高格子.恩有点绕口…先考虑一条路径,如果水从这条路径流出去,那水位的高度至少要比路径经过的所有格子都要高,也就是这条路径使得水位不会高于这个值.然后dfs每条路径,取最小的限制值,就能得到结果.
不过,这玩意其实等价于求每个格子到板外的最短路径,路径长度等于路径中最高点的大小.那只要把外面看成一个点,求外面到每个格子的单源最短路,把得到的值和原值减一下就行了.
另外还有并查集的做法,我不会…
我这里是Dijkstra的做法.
1 | //省略头文件 |
C. Jane’s Flower Shop
给$M+1$个数,如$M = 3$, $4$个数$C_0 = 10000$,$C_1 = 3000$,$C_3 = 4000$,$C_4 = 5000$,求一个$r$满足:
$$-10000(r+1)^3 + 3000(r+1)^2 + 4000(r+1) + 5000 = 0$$
其中$-1 < r < 1$,$1 ≤ M ≤ 100$,$0 ≤ C_i ≤ 1,000,000,000$,输入保证只有一个解.
天呐,智障题把我这个智障卡了好久.其实条件保证只有一个解,那就是说如果把式子左边看成函数,那函数在$-1 < r < 1$范围内和$0$只有一个交点.整个函数只有一个负项,就是第一项,也就是说函数只会先增加后减少,或者只减少.取$r = -1$函数一定不小于$0$.因此可以判定要有解的话$r=1$一定是不大于$0$的,然后瞎二分找取$0$的点就行了.
(我才不会说我之前根本没考虑这么多,因为想漏了所以这样写的)
1 | //省略头文件 |
D. Clash Royale
有$N$张卡牌,每张卡牌有个当前等级$L[i]$和最高等级$K[i]$,卡牌$i$从等级$j$升级到$j+1$需要花费$C[i][j]$,卡牌$i$在等级$j$时攻击力为$A[i][j]$.现在给一个数$M$表示现有的金币可以用于升级,问升级后$8$张卡牌攻击力和最高是多少.
小数据只有$8$张牌,$M$也比较小,可以直接把卡牌的升级方案作为物品跑背包.
1 | //省略头文件 |
大数据的话我并没有写出来.后来听了伟神的解法,感觉有点谜.
$N$最大为$12$,分成每边$6$张,两边先各自计算.枚举每种升级方案,得出取$2$到$6$张的时候有多少种升级方式可以选择.因为张数相同的时候肯定取花费小而攻击高的,所以可以按花费排序,去掉花费提高攻击却减小的情况, 维护一个单调性.
然后合并两边,使得一边取$i$张,一边取$8-i$张.枚举其中一边的每种升级方案,在另一边二分出满足花费限制攻击力最高的方案,保留最大值.
我觉得这个复杂度有点谜,听起来也挺麻烦的.
在朱神的指点下, 我直接维护取$1$到$8$张时每种情况的单调性, 也能很快出结果, 复杂度谜.
1 | //省略头文件 |