Codechef April Challenge 2017

Similar Dishes & Dish Of Life & Bear and Row 01

这三个题比较简单吧,一眼题。。。

Bear and Clique Distances

题意:给定 N 个节点的图,其中编号1K的城市之间组成完全图,即 k(k1)2 条边,已知它们长度均为 x ,另外有p 条边,连接起整个图为连通图,图中不存在自环和重边,给定源点 S ,求单源最短路?

思路:题目解法很多,首先一种最简单的解法。
解法一: 重新构造一个图,引入新的点 O,将 O 点与点1k连边,长度均为 x2 ,其余 p 条边不变,那么整个图只有p+k条边了,接下来就是 dijkstra算法了,优先队列优化一下,复杂度 O((p+k)logn)

解法二:改进一下dijkstra算法,每次第一次访问 1k 中的节点 v 时,把这个团中其余节点的 dis 距离当做 dis[v]+x ,然后,在遍历与 v 相连的其它边(即该边不在团中)时,更新的时候,原来的dis[v] dis[v]+x 来代替。这样就不需要遍历 k2 条边了。

Chef and Divisor Tree

题意:给定数 x ,根节点值为x,该Divisor Tree的值定义如下。 对于树的每个节点,子节点处的值将是其父亲节点值的适当除数(即除父亲节点值本身外的所有数)。该树中路径的权重定义为路径中所有节点的度数之和。Divisor Tree的值将是从根开始的路径的最大路径权重。

你有两个整数 A B。您必须找到所有树的权重之和,其根节点上的值在 A B的范围内,包括两者,数的范围为: [1,1012],|BA|106

思路:首先可以找一下规律嘛,可以看出,一个数表示为:

x=pk11pk22...pknn

pi 为素数,那么 x 的Divisor Tree的值为:将[k1,k2...kn]中的值, ans+=(1+k1)(1+k2)...(1+kn) ,然后把最大的 ki 1 ,进行这个过程,直到该数组元素全为0

所以这个题就好做了!(注意数值范围,long long)

Stable market

题意稳定时间段定义为值相同的极大连续段,在此基础上定义 K 阶稳定时间段为长度至少为 K 的稳定时间段。
给定数组 A Q次询问,每次询问区间 [Li,Ri] xi 阶稳定时间段个数为多少?

思路:第一眼看上去,数组转化为一个新的数组,每个元素为每个稳定连续块的长度,然后记录一下这个稳定块的左右区间,问题就转化为新数组里,在指定区间里,有多少个数大于等于 xi ?注意处理一下边界情况就行了!感觉主席树就能做了啊!但是,主席树怎么写来着,忘记了。。。。算了,不写了。。好像分块也能做啊。。。啊。。。不想写。。。。

看了下官方的题解,有很多种解法:

解法一:主席树 或者 线段树+二分

解法二:离线处理+分块, 每次询问的平均复杂度: O(nlogn)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值