2018年计算机科学与工程学院新生赛2
ACM新生赛总结2,加油!
A#
336. 酋雷姆
这题想法很好,把看似两种不同的毁灭世界方法统一成一种。
假想一个世界0,它在开始时就已经毁灭,并且把世界0和世界$i$连接需要花费$w_i$。
这样问题就变成求完全图的最小生成树了。
Kruskal算法#
时间复杂度$O(E\lg E)$,可能常数偏大,并查集并未写按秩合并的功能。
1 |
|
Prim算法#
时间复杂度$O(E\lg V)$,采用了优先队列优化,若用斐波那契堆实现优先队列可优化到$O(V\lg V)$。
1 |
|
B#
337. 岩殿居蟹
把题目给的式子拆开,可以发现只要维护$A_i$与$i\times A_i$的区间和。
用树状数组维护即可。
由于平时树状数组写的少,比赛时一直出错,结果没写出来。
1 |
|
C#
338. 三首恶龙
问至少有多大,显然可以二分x,对每个x判断是否可行。
判断x时贪心选择即可。
1 |
|
D#
E#
340. 单首龙
题解说是dp,但我暴力二分也过了。
显然只需考虑最大沿主对角线对称子矩阵。
同样是求最大,而且注意到,这个最大的子矩阵的子矩阵也必然是沿主对角线对称的。
对每一个x暴力判断是否存在大小为x的沿主对角线对称子矩阵。
复杂度有点难分析,可能约为$O(n^3\lg n)$。
二分做法:#
1 |
|
dp做法#
此题也可利用dp,用$f[i][j]$表示以原矩阵第$i$行第$j$列为右下角的最大沿主对角线对称子矩阵边长。
则计算$f[i][j]$时只需从小到大枚举一个边长$k$,比较第$i$行第$j$列对应数值是否相同,同时判断$f[i-1][j-1]\ge k-1$是否成立即可。
复杂度为$O(n^3)$。
1 |
|
F#
341. 爆香猴
广搜。。。
为什么我广搜都不会。
1 |
|
G#
342. 战槌龙
2018 ICPC沈阳站 热身赛B——CLS and LCS
题意 : A和B两字符串的LCS长度是k,现给定A和k,输出一个B。
思路 : 统计A中出现次数最少的字母,例如是a,就将B置为N个a,然后从前往后把A中不是a的字母替换B中字母,替换k-a个即可。
例如 A :acbdbaaad N = 9, K = 8.
其中c个数最少,则B = ccccccccc
K - c个数 = 7
则B = acbdbaaac。
构造题很玄学。。
思路不是很清晰,慢慢想一下。。
1 |
|
H#
I#
344. 基格尔德
暴力匹配。
1 |
|
J#
345. 变隐龙
大坑题。题意非常简单,就是数字有点大。
但是我没注意到在unsigned long long范围内。
一开始用两个long long 计算一直WA。
含泪打了个高精度模版通过。
后来才听说long double也能过。
C++高精度模版做法:#
1 |
|
C++unsigned long long 做法:#
1 |
|
C++long double做法#
这里x的读入用long long也行,取绝对值最好用fabs,但经过测试用abs也可通过。
1 |
|
参考资料#
题解
优秀代码
2018年计算机科学与工程学院新生赛2