比赛链接 官方题解
A - 配对
贪心+思维
要使得第K大的和尽可能大,利用贪心的思想完成此题。可以发现,如果A1<A2,B1<B2,那么一定是由A1和B2配对较优。简单归纳可知,倒序配对最优。
B - 图
图论
其实这道题用tarjan缩点更好写,也可以像题解中说的利用基环树的一些性质进行简单dfs求解
C - 汉诺塔
dp+思维
D - 重排列
简单思维
A,B两个序列无论是按什么顺序排列,都不影响结果。为了方便起见,对A,B两个序列都采用升序排序,我们只用看每一步有多少种情况,这个答案与之前填入的方案数无关。
E - 立方数
二分+计算贡献+素数筛
输入的整数N取值范围是1-10^18,10^18开三次方是10^6,素数筛找出10^6以内的质数,然后用N试除这些质数的三次方,那么余下的数要么是完全立方数,要么是对答案没有贡献的数。只需要用二分法来验证X是不是一个完全立方数即可。
优化:通过进一步的分析,如果我们仅使用N^(1/4)(记为W)以内的质数去试除,那么最后余下的数X仅具有大于W的因子也可以得出结果。
F - 十字阵列
简单模拟
在进行H次魔法伤害之后,假设在x,y处的值是a,计算得到对答案的贡献是[n*(n-1)/2+(n-1)*y+m*(m-1)/2+(m-1)*x]*a
G - 括号序列
简单模拟
用栈模拟括号序列的匹配过程,碰到一个'('就加入栈中,碰到一个')'就消去栈顶的一个'(' 。如果栈中没有没有'('则这个')'必须要删去
在这个过程结束之后,如果'('比')'多,则从后向前删去多余的'(',直到序列合法即可
H - 云
思维+扫描线
I - 导航系统
图论
显然数据给出的原图是一棵树。容易发现,如果将输入的N(N-1)个距离看做N(N-1)条无向边的话,那么如果数据合法,原树就是这张新图的最小生成树。 那么求出最小生成树之后在验证就行了。
这个题解法很多,floyd,并查集,LCA(最近公共祖先)等等
J - 签到题
构成三角形的条件:最小边+次小边>最大边
假设三角形三边是a,b,c 圆半径是r1,r2,r3
若能构成两两相切的圆
r1+r2=a
r1+r3=b
r2+r3=c
解方程即可