和jz姐姐的vp记录

旧时模样 提交于 2019-12-02 03:22:48

即使如此,jz姐姐也漂亮的取得了胜利

2015-2016 Petrozavodsk Winter Training Camp, Makoto rng58 Soejima Сontest 4题解

传送门

\(jz\)姐姐带着飞……代码的话直接在上面找吧

\(A\)

发现这样的数不会很多,直接把所有的都打表打出来就行了

\(B\)

转换成切比雪夫距离后,每个点分别向\(x,y\)坐标最大最小的点连边,跑个最大生成树就行了

\(C\)

最终的柿子一定行如\(s\pm t=2a_{i_1}-2a_{i_2}+...\),那么直接\(bfs\)出所有可能的结果,然后根据奇偶性判断一下就行了

\(D\)

唯一会重复计数的地方,就是把两个相同的公共子串拼在一起,我们把一个由两个相同公共子串拼在一起的串称为\(jz\)串。为了避免重复计算,由于\(jz\)串中每个数字都会出现恰好两次,我们默认先出现的那个来自于\(p\),后面那个来自于\(q\)

\(g_k\)表示由一个长为\(2k\)\(jz\)串,且不存在一个前缀也为\(jz\)串,显然\(g_k=C_k-\sum_{i=1}^{k-1}g_iC_{k-i}\),其中\(C_k\)表示第\(k\)个卡特兰数

然后我们设\(f_{i,j}\)表示\(p\)取到了\([1,..,i]\)\(q\)取到了\([1,...,j]\)的方案数,首先有\(f_{i,j}=f_{i-1,j}+f_{i,j-1}\),然后考虑减去重复的,枚举每一个\(k\)使得\(p[i-k+1,...,i]=q[j-k+1,..,j]\),那么\(f_{i,j}-=f_{i-k,j-k}\times g_k\)(因为长为\(2k\)\(jz\)串中默认前面的为\(p\)或者\(q\)是等价的,而直接\(dp\)的过程中认为它们不等价),而且不难发现对于所有的\((i,j)\)总共要枚举的\(k\)只有\(O(n^2)\)个,所以总复杂度为\(O(n^2)\)

\(E\)

\(sort\)一遍,然后记\(f_i\)表示用了\(i\)个蛋糕之后的最小重量,直接\(dp\)即可

\(F\)

首先等式相当于对于\(a_i\)整除分块之后,每一种颜色在同一块里,那么不同\({a_i\over x}\)的个数只有\(O(\sqrt{a_i})\)个,那么把所有的\(x\)都取出来,形成若干段,对于每一段依次判断是否合法即可

\(H\)

考虑容斥,如果没有重复经过点就是\(4^n(n+1)\)

重复经过点一定是走了一个环,且如果走环的时候没有重复经过点,则一个环就唯一对应多走的一次,我们枚举环的长度\(i\)以及在环上\(n-i+1\)个点中的哪个开始绕圈即可

\(f_k\)表示走了\(k\)步成环,可经过重复点的方案数,则\(f_n=\sum_{i=0}^{n/2}{n!\over i!i!(n/2-i)!(n/2-i)!}=\sum_{i=0}^{n/2}{n/2\choose i}{n/2\choose i}{n\choose n/2}\)

那么\(g_n=f_n-\sum_{i=1}^{n-1}g_if_{n-i}\)

最终的答案就是\(4^n(n+1)-\sum_{i=1}^n g_i(n-i+1)\)

\(I\)

首先把每个机器人所在的点拆成四个,分别表示四个方向,记为\((u,L/R/D/U)\)。如果存在\(x_i<x_j\)\(y_i=y_j\),那么从\((i,R)\)\((j,R)\)连一条边,边权为\(x_j-x_i\),表示如果有机器人从右边进入\(i\),那么可以继续进入\(j\)。然后对于拆出来的点,将表示其他方向的点向表示这个机器人朝向的点连一条长度为\(0\)的边,表示如果其它机器人从另一个方向进入\(i\),可以使\(i\)从自己所朝的方向出去。跑一个最短路,求出\(dis\)表示每个机器人动起来的最早的时间即可

\(J\)

度数限制,\(Prufer\)序列搞一搞就行了

\(K\)

这道题等价于求出一组模长相等的正交基,使得它可以整系数线性表示出所有的差向量,且点数最少意味着这组正交基模长最长,所以对于所有的差向量求一个\(gcd\),然后算出算出最小的边长就是了

不要问我向量gcd是什么能用就行

\(L\)

直接模拟就行了

\(M\)

如果\(n\)为奇数,直接枚举\(d\)\(1\)\(n/2\),每次将\(i,i+d,i+2d\)连边(\(n\)个一循环)

如果\(n\)为偶数,对\(1\)\(n-1\)枚举\(d\)\(1\)\(n/2-1\)做一遍上述操作,再枚举\(d\)\(2\)\(n/2-1\)做一遍,然后以\(n-1\)个一循环,将每个\((i,i+1,n)\)连两条边,将\((i,i+2,n)\)连一条边就行了

2016 North American Invitational Programming Contest题解

传送门

极度自闭,前三个半小时做到只剩两道题,结果被\(G\)彻底卡住,我和\(jz\)姐姐两种写法全都死得莫名其妙,心态彻底炸裂

\(A\)

咕咕

\(B\)

大模拟

\(C\)

状压,设\(f_{i,j}\)表示用了\(i\)种纸覆盖了集合\(j\)的纸的最小代价,转移就是枚举子集,那么新用的纸肯定是取这个集合的所有纸里最大的长和宽是最优的,转移即可

\(D\)

分数规划+必须有上司的舞会

\(E\)

把原串\(B\)记为\(1\)\(A\)记为\(0\),再翻转之后\(A\)记为\(1\)\(B\)记为\(0\)\(NTT\)就行了,卷积之后第\(n-1-i\)项系数就是题中\(i\)的答案

\(F\)

直接跑背包就行了,最后减去所有相等的方案

\(G\)

道心崩碎了

不难发现如果两条线段有相同的中点或者中垂线的话,这两条线段一定没有公共端点,那么我们对于所有的中点和中垂线计算出现次数,取出现次数最大的就行了

然而上面忽视了一个地方,如果有很多个点在同一条直线上,完全可以以这条直线为对称中心的线,上面完全没有考虑这种情况

\(H\)

分治背包,记\(f_{i,j}\)表示体积不超过\(i\),总容量不超过\(j\)的最大收益,然后对于当前体积\(s\)\(j\)按模\(s\)分组,组内有决策单调性,分治即可

\(I\)

直接\(O(n\log n)\)枚举所有点对就行了

\(J\)

先填完,然后从后往前枚举时间点,黑白用\(set\)维护

\(K\)

点分之后,两颗不同子树中每个点可以看成\((a_u,dis_u),(a_,v,dis_v)\),而贡献就是\(a_ua_v+dis_u+dis_v\),那么对于\(u\)来说所有的\(v\)都可以看成一个一次函数,直接超哥线段树维护就行了

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!