[题解]CodeChef APRIL Challenge 17
2017-04-18 21:43
267 查看
Similar Dishes
题意简述
给你两个大小为4的字符串集合,问你并集是不是空集。数据范围
1≤T≤2002≤len≤10
思路
丝薄模拟。Dish Of Life
题意简述
n个岛,每个岛pi种食材。食材编号为1~k
问能否收集到全部食材,如果能,是否必须经过所有岛。
数据范围
1≤T≤101≤n,k≤105
1≤∑p≤106
思路
随便那个bool数组搞一搞就行了,丝薄题。Bear and Row 01
题意简述
给出一个01序列,每次可以选择一个
1,如果它右边为
0,便可以向右移动一格。
选择和移动都要花费1s。
求最长时间。
数据范围
1≤T≤51≤len≤105
思路
移动完成之后相对位置不变,每个1最后到的位置是确定的。
移动的代价就确定了。
最大化选择的代价。
每个
1被选择的次数与它右边的
1需要移动长度的种类数有关。
随便搞搞就A了。
Bear and Clique Distances
题意简述
n个城市。前k个城市两两之间都有长度为x的道路相连。
此外还有m条道路。
求从S出发到每个城市的最短路。
数据范围
1≤T≤32≤n≤105
1≤m≤105
1≤len≤109
思路
对前k个城市建一个附加点p。连ai→p(x),p→ai(0)
然后就是个裸的最短路了。
Chef and Divisor Tree
题意简述
定义x的因子树:x作为根,将x的真因子作为它的儿子。
对每个儿子重复这个步骤。
(一个数可能被写多次)
一条路径的得分定义为路径上所有点的度数之和。
一棵树的得分f(x)定义为所有从根到叶子的路径的得分的最大值。
计算∑Ri+Lf(i)
数据范围
1≤L≤R≤1012R−L≤105
思路
x的因子树的得分最高的路径:x每次去掉次数最高的质因子,直到走到1。得出结论:x的因子树的得分,只与x的质因数的次数形成的集合有关。
1012以内最多只有11个质因子。
爆搜出所有的集合,状态只有不到5000种。
一个数>n√的质因数最多只有一个。
用1012−−−−√的质数筛这个区间,就可以求出这个区间所有数的质因子次数集合。
然后就可以直接做了。
UPD:后来发现直接暴力减就可以了???
Stable market
题意简述
给出长度为n的数列。定义稳定块为权值相同的日子的极大连续段。
定义k 阶稳定块为长度至少为 k 的稳定块。
回答q个询问,每次询问[Li,Ri]区间中,k阶稳定块的个数。
数据范围
1≤T≤51≤n,q≤105
1≤ai≤106
思路
直接上莫队就好了嘛…Bear and Random Grid
题意简述
n×n的网格。每个格子里是
.或
#。
.表示有一个棋子,
#表示障碍。
给出L个操作,形如
RLUD表示向左右上下移动。
每次操作所有棋子一同移动,如果碰到障碍或者超出边界便移除。
问每个棋子能走多少步,输出它们的异或和。
数据安装一定方法生成:定义一个概率p,每个格子有p的概率成为障碍。
数据范围
1≤T≤31≤n≤1000
1≤L≤5000
0≤p<1
思路
bitset强行搞。行列都搞一个bitset。每次操作完统计一下棋子个数。
复杂度O(Tn2L64)。
可以通过本题。
好像另有高论啊……
按照p分类。
如果p很大,障碍较多,从每个棋子开始走走几步就碰到障碍了,直接模拟期望复杂度O(n2p)。
如果p比较小,障碍较小,从障碍反着走。复杂度O(n2pL)
Chef and Digits
题意简述
问[L,R]区间内有多少数,数字i的个数≠ai。数据范围
1≤T≤201≤L≤R≤1018
0≤ai≤18
思路
数位DP。统计答案再套一个DP。
f(i,j)表示放到i个数,一共放了j个数。
转移f(i,j)=f(i−1,j−k)×C(j,k)
复杂度O(Tlog5R)
(CH) Serejs and Billiards
题意简述
一道challenge题目。给出一张n×n的球桌,上面有m个球,每个球有一个分数。
每次击球可以选择八个方向,上下左右和它们的角平分线方向。
如果碰到桌壁,球会镜面反弹。
如果碰到另一个球,会将这两个球合并,继续走。
如果到了桌角斜后方的点(假设(0,0)是桌角,描述的是(−1,−1)的位置),球会进洞,得到得分。
每次击球会花费1分的代价。
最大化得分。
数据范围
1≤T≤101≤n≤100
1≤m≤1000
思路
1.将所有正得分的球移动到上沿,负得分球移动到左沿。2.最左列如果有正,就向右/右上/右下移动一下。
3.最上行如果有负,就向下/左下/右下移动一下。
4.整行/列的移动可以通过一次击球得到。
5.xjb优化
Heavy-Light Decomposition
题意简述
对一棵n个节点的树进行轻重链剖分。一条轻链的代价为L。
一条重链的代价为⌈log2L⌉+1
使得从根到叶,代价最大的路径的代价最小。
求这个最小值。
数据范围
1≤T≤101≤n≤105
思路
朴素DP。f(i,j)表示i节点向上重链长度为j时,最小的子树代价最大值。
转移显然,枚举每一个儿子当做重儿子,取min。
这样复杂度O(n2)需要优化。
联想树链剖分,不超过logn条重链,每条重链代价为log,答案在log2级别,实测120+。
其实题目描述就是树链剖分线段树的复杂度?
考虑转换状态。
f(i,j)表示i节点,答案为j时,向上重链长度的取值区间。
由于单调性,我们只需要保存一个端点即可。
转移显然。
复杂度O(Tnlog2n)
相关文章推荐
- [题解]CodeChef JUNE Challenge 17
- Codechef July Challenge 2014部分题解
- Codechef April Challenge 2017
- codechef April challenge (1)(学习去优化时间效率???)
- codechef February Challenge 2018 简要题解
- codechef:April Challenge 2014: Cards, bags and coins
- [最短路] [CODECHEF April Challenge 2017] 小熊与团间距离(CLIQUED)
- codechef Ambiguous Permutations 题解
- codechef Correctness of Knight Move题解
- CodeChef January Long Challenge 2016 - SEAKAM
- Codechef February Challenge坑
- [数学 FFT] Codechef July Challenge 2017 #APRPS Irrational Root
- CodeChef March Challenge 2015
- Codechef Not a Triangle题解
- [整体二分] Codechef January Challenge 2018 #MONSTER Killing Monsters
- Codechef Racing Horses题解
- codechef May Challenge 2016 FORESTGA: Forest Gathering 二分
- codechef Hotel Bytelandia题解
- codechef May Challenge 2016 CHSC: Che and ig Soccer dfs处理
- codechef December Challenge 2012