[题解]CodeChef APRIL Challenge 17

Similar Dishes

题意简述

给你两个大小为 4 的字符串集合,问你并集是不是空集。

数据范围

1T200
2len10

思路

丝薄模拟。

Dish Of Life

题意简述

n 个岛,每个岛pi种食材。
食材编号为 1 ~k
问能否收集到全部食材,如果能,是否必须经过所有岛。

数据范围

1T10
1n,k105
1p106

思路

随便那个bool数组搞一搞就行了,丝薄题。

Bear and Row 01

题意简述

给出一个01序列,每次可以选择一个1,如果它右边为0,便可以向右移动一格。
选择和移动都要花费1s。
求最长时间。

数据范围

1T5
1len105

思路

移动完成之后相对位置不变,每个1最后到的位置是确定的。
移动的代价就确定了。
最大化选择的代价。
每个1被选择的次数与它右边的1需要移动长度的种类数有关。
随便搞搞就A了。

Bear and Clique Distances

题意简述

n 个城市。
k个城市两两之间都有长度为 x 的道路相连。
此外还有m条道路。
求从 S 出发到每个城市的最短路。

数据范围

1T3
2n105
1m105
1len109

思路

对前 k 个城市建一个附加点p
aip(x) pai(0)
然后就是个裸的最短路了。

Chef and Divisor Tree

题意简述

定义 x 的因子树:
x作为根,将 x 的真因子作为它的儿子。
对每个儿子重复这个步骤。
(一个数可能被写多次)
一条路径的得分定义为路径上所有点的度数之和。
一棵树的得分f(x)定义为所有从根到叶子的路径的得分的最大值。
计算 Ri+Lf(i)

数据范围

1LR1012
RL105

思路

x 的因子树的得分最高的路径:x每次去掉次数最高的质因子,直到走到 1
得出结论:x的因子树的得分,只与 x 的质因数的次数形成的集合有关。
1012以内最多只有11个质因子。
爆搜出所有的集合,状态只有不到5000种。
一个数 >n 的质因数最多只有一个。
1012 的质数筛这个区间,就可以求出这个区间所有数的质因子次数集合。
然后就可以直接做了。
UPD:后来发现直接暴力减就可以了???

Stable market

题意简述

给出长度为 n 的数列。
定义稳定块为权值相同的日子的极大连续段。
定义k 阶稳定块为长度至少为 k 的稳定块。
回答q个询问,每次询问 [Li,Ri] 区间中, k 阶稳定块的个数。

数据范围

1T5
1n,q105
1ai106

思路

直接上莫队就好了嘛…

Bear and Random Grid

题意简述

n×n 的网格。
每个格子里是.#.表示有一个棋子,#表示障碍。
给出 L 个操作,形如RLUD表示向左右上下移动。
每次操作所有棋子一同移动,如果碰到障碍或者超出边界便移除。
问每个棋子能走多少步,输出它们的异或和。
数据安装一定方法生成:定义一个概率p,每个格子有 p 的概率成为障碍。

数据范围

1T3
1n1000
1L5000
0p<1

思路

bitset强行搞。
行列都搞一个bitset。每次操作完统计一下棋子个数。
复杂度 O(Tn2L64)
可以通过本题。
好像另有高论啊……
按照 p 分类。
如果p很大,障碍较多,从每个棋子开始走走几步就碰到障碍了,直接模拟期望复杂度 O(n2p)
如果 p 比较小,障碍较小,从障碍反着走。复杂度O(n2pL)

Chef and Digits

题意简述

[L,R] 区间内有多少数,数字 i 的个数ai

数据范围

1T20
1LR1018
0ai18

思路

数位DP。
统计答案再套一个DP。
f(i,j) 表示放到 i 个数,一共放了j个数。
转移 f(i,j)=f(i1,jk)×C(j,k)
复杂度 O(Tlog5R)

(CH) Serejs and Billiards

题意简述

一道challenge题目。
给出一张 n×n 的球桌,上面有 m 个球,每个球有一个分数。
每次击球可以选择八个方向,上下左右和它们的角平分线方向。
如果碰到桌壁,球会镜面反弹。
如果碰到另一个球,会将这两个球合并,继续走。
如果到了桌角斜后方的点(假设(0,0)是桌角,描述的是 (1,1) 的位置),球会进洞,得到得分。
每次击球会花费1分的代价。
最大化得分。

数据范围

1T10
1n100
1m1000

思路

1.将所有正得分的球移动到上沿,负得分球移动到左沿。
2.最左列如果有正,就向右/右上/右下移动一下。
3.最上行如果有负,就向下/左下/右下移动一下。
4.整行/列的移动可以通过一次击球得到。
5.xjb优化

Heavy-Light Decomposition

题意简述

对一棵 n 个节点的树进行轻重链剖分。
一条轻链的代价为L
一条重链的代价为 log2L+1
使得从根到叶,代价最大的路径的代价最小。
求这个最小值。

数据范围

1T10
1n105

思路

朴素DP。
f(i,j) 表示 i 节点向上重链长度为j时,最小的子树代价最大值。
转移显然,枚举每一个儿子当做重儿子,取 min
这样复杂度 O(n2) 需要优化。
联想树链剖分,不超过 logn 条重链,每条重链代价为 log ,答案在 log2 级别,实测120+。
其实题目描述就是树链剖分线段树的复杂度?
考虑转换状态。
f(i,j) 表示 i 节点,答案为j时,向上重链长度的取值区间。
由于单调性,我们只需要保存一个端点即可。
转移显然。
复杂度 O(Tnlog2n)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值