牛客网暑期ACM多校训练营(第三场)

Rank Solved A B C D E F G H I J
37/474 5/10 O Ø O Ø O Ø Ø O Ø O

O: 当场通过

Ø: 赛后通过

.: 尚未通过

A PACM Team

solved by chelly


chelly's solution

直接背包即可,注意空间的压缩和最后路径的输出
输出路径我们只需要维护一个bool数组path[i][S]表示第i个物品有没有更新状态为S的背包,然后最终从后往前一个一个提取出来即可

B Expected Number of Nodes

upsolved by chelly


chelly's solution

枚举k,对于每一个k计算答案
若要求期望,那么分母一定是C(n,k),我们主要考虑分子,分子的意义是C(n,k)种选取方式带来的剩余点数的和
我们分开考虑每个点的贡献,可以发现以下的性质:

  • \(d(x)<=2\),那么这个点如果要对结果造成1的贡献,那么它必须被选进点集,所以该点对答案的贡献是C(n-1,k-1)
  • \(d(x)>2\),这个点如果不作出贡献,那么肯定是选的点集在该点的两个或一个子树中,我们把这种情况减去就行了,可以通过枚举两个子树来完成

这样对于每个k,我们的计数是\(O(n^2)\)的,总共是\(O(n^3)\)
但是容易注意到,我们每次枚举k,分子一定是一些组合数的和,而这些组合数的下面是不变的,只有上面变,于是我们可以提前预处理出每个C(i,*)的系数即可
最终时间复杂度\(O(n^2)\)

C Shuffle Cards

solved by chelly


chelly's solution

splay模板题

D Encrypted String Matching

upsolved by chelly


chelly's solution

问题可以通过简单的转化变成:有一个字符串S和一个字符串T,|T|<=|S|,问S的所有长度为|T|的子串中,有哪些是与T串相似。两个字符串相似当且仅当每一位上的字符ASCII码差不超过1
首先当"相似"变成“全等”的时候,这就变成了一个经典问题,可以将T倒序,然后T和S卷积
现在是相似,一种naive的想法是枚举字符的映射,转化成全等问题,但这样要做3^26次FFT,显然无法接受
考虑现在有两个长度都为n的字符串X和Y,我们如何说明它们是相似的呢?
其实只要满足\(\sum_{i=0}^{n-1} (X_i-Y_i)^2 [(X_i-Y_i)^2-1] =0\)
然后我们去括号合并同类项之后,发现有4个交叉项,我们用4次FFT求解即可,需要预处理一些东西
时间复杂度\(O(lenloglen)\)

E Sort String

solved by chelly


chelly's solution

用Kmp求一下循环节即可

F Sum Of Digit

upsolved by chelly


chelly's solution

首先需要知道Sum of digits的性质,对于\(SOD(x,base):\)

  • if x==0 : return 0
  • if x%(base-1)==0 : return base-1
  • otherwise return x%(base-1)

所以对于一个询问区间[l,r],我们想知道里面有多少个子序列的和模15余0,1,2,...15,这显然直接开16个线段树维护答案即可
时间复杂度\(O(16nlogn)\)

G Coloring Tree

upsolved by chelly


chelly's solution

考虑这样一个推广问题:有一个无向图,给每个点染色,有k种颜色,任意两个距离<=d的点不能相同颜色,问有多少种染色方案
这个问题是不好解决的,但我们可以解决一些特殊的拓扑结构

  • 如果是个链,那显然从左往右计算每个位置可以染多少种颜色然后乘起来就行了
  • 如果是个树,那就是这个题目了,主要是要类比链的情况寻找一个合适的拓扑序进行计算,找这个拓扑序的关键就是轮到某个点x的时候,已经拓扑过的与x距离<=d的点自身也都是距离<=d,对于树的情况按照BFS顺序来即可
    于是这个题定义solve(d)表示不存在两个同颜色的点距离<d的方案数
    那么答案就是solve(d+1)-solve(d)
    时间复杂度\(O(n^2)\)

H Diff-prime Pairs

solved by syf


syf's solution

I Expected Size of Random Convex Hull

upsolved by chelly


chelly's solution

容易发现答案和三角形形状无关,所以可以生成一个方便计算的三角形
然后随机产生点,求凸包上的点的个数,然后取个平均即可
每个答案跑1e7次随机就可以得出准确答案了
当然从论文中也可以找出一个结论
在一个三角形中随机取n个点形成的凸包上的点个数期望\(E(n)=\sum_{i=1}^{n-1} \frac{2}{i}\)

J Distance to Work

solved by chelly


chelly's solution

二分一下圆的半径,然后求圆和凸多边形的面积交即可。

Replay

本场由chelly和syf打的,ch去参加bupt camp了。
日常chelly顺开,syf倒开,chelly发现A题是个裸背包,注意下空间就行了,于是开敲,但是数据有问题,前期一直搞不过,后来rejudge过了。而syf切掉了H题。随后chelly发现E题是个简单的找循环节,就敲了个kmp秒了。随后chelly和syf一起搞C,chelly思考了一会后,发现并不会这个题……于是只能贴个splay板子暴力过了(后来出题人说这题就是个板子题,并没有什么高论)。此时J题数据修好了,rejudge后J题过了一批,于是chelly和syf一起搞J。chelly发现J题十分简单,二分答案之后就是求圆和多边形的面积交,上网一找有现成的板子,于是开敲。但是十分怀疑J题坐标范围不止1000,原先chelly的代码二分上界是3000,改了各种eps和姿势一直不过,最后把上限改大了才通过TAT。之后大概还剩个I题可以搞一搞,chelly粗略看了下题面中提到的论文,并没能找到什么结论,于是就想自己随机生成点然后打表,但是随机的姿势不对,搞了个伪随机,导致精度误差挺大的。于是后来就没出题了。

posted @ 2018-07-26 20:44  AHU_Amadeus  阅读(232)  评论(0编辑  收藏  举报