2020牛客寒假算法基础集训营6

比赛链接    官方题解

A - 配对

贪心+思维

要使得第K大的和尽可能大,利用贪心的思想完成此题。可以发现,如果A1<A2,B1<B2,那么一定是由A1和B2配对较优。简单归纳可知,倒序配对最优。

贪心算法博客讲解

B - 图

图论

其实这道题用tarjan缩点更好写,也可以像题解中说的利用基环树的一些性质进行简单dfs求解

tarjan算法讲解       浅谈基环树

C - 汉诺塔

dp+思维

Dilworth定理        单调性优化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(最近公共祖先)等等

floyd算法讲解    并查集           最小生成树      浅谈LCA      

J - 签到题

构成三角形的条件:最小边+次小边>最大边
假设三角形三边是a,b,c 圆半径是r1,r2,r3
若能构成两两相切的圆
r1+r2=a
r1+r3=b
r2+r3=c
解方程即可

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值