luogu P5288 [HNOI2019]多边形】的更多相关文章

传送门 这是什么神仙操作... 首先要注意一些性质.首先每一个\((x,n)\)的边可以把当前多边形分成两半,这两半的操作是独立的.然后对于某一个没有\((x,n)\)的边的多边形,最优操作是唯一的.拿样例举例,必须先选\((1,5)\),然后多边形被分成两半,这两半分别只能选\((1,3)\),\((3,5)\). 可以发现,这里每次操作的多边形上的点分别是\(l,l+1...,r(l\ge 1,r<n,r-l>1)\)和\(n\),然后最优方案要选\((l,r)\)这条边,把多边形分成\(…
原题传送门 HN的题目就是毒瘤 我们有以下猜想: 1.最后所有的线都连到了n号点上 2.最小步数应该为n-3-已经连到n号点的线段数量 本来有些边\((a_i,n)\)会将整个图分割成很多个区间.对于一个区间\([l,r]\),\(l,r\)之间必定存在一条边,并且一定存在点\(mid\)有\((mid,l),mid(mid,r)\)的边,所以我们珂以用一次旋转使得\((l,r)\)变成\((mid,n)\),这样这个区间有珂以分成两个子区间,珂以建出二叉树.一直如此,直到\(r=l+1\)为止…
HNOI2019 多边形 polygon https://www.luogu.org/problemnew/show/P5288 这题镪啊... 首先堆结论: 显然终止状态一定是所有边都连向n了 根据样例及打表猜个结论,每一步一定可以新连一条到n的边,这个结论也很好证 然后可以把多边形分成若干区间,这些区间形成一棵树.具体划分方法很简单,就是用一些现有的点和中间所有边构成的多边形缩成一个区间,这些点要满足:编号连续,和只有编号最小最大的点与n有连边.比如样例中[1,3],[3,5],[1,5].…
[HNOI2019]多边形(模拟,组合计数) 题面 洛谷 题解 突然特别想骂人,本来我考场现切了的,结果WA了几个点,刚刚拿代码一看有个地方忘记取模了. 首先发现终止态一定是所有点都向\(n\)连边(看样例图解就知道了) 那么大力猜想一下第一问的答案一定是\(n-3-\)和\(n\)号点直接相连的边数. 手玩一下,发现这样一件事情:和\(n\)直接相连的所有边把多边形分割成了若干个区间,每个区间都用\([l,r]\)表示. 对于\([l,r]\)这个区间,因为已经分割出来了,也就是除了\(l-n…
点此看题面 大致题意: 给你一个多边形,用若干不重合.不相交的线段将其划分为若干三角形区域,并定义旋转操作\((a,c)\)为选定\(4\)个点\(a,b,c,d\)满足\(a<b<c<d\)且\(ab,ac,ad,bc,cd\)有连边,然后删去边\(ac\)并加上边\(bd\).带修独立询问至少旋转几次使得无法继续旋转. 关于无法继续旋转 第一次看完题面,我是一脸懵逼:选中四个点不可以无限重复旋转吗?为什么会无法旋转? 然后冷静了一下重新看了遍题面,才发现\(a,b,c,d\)是有序的…
非常妙的一道思博题啊,不愧是myy出的题 首先我们考虑一个暴力DP,直接开一个数组\(f_{i,j}\)表示\(i\to j\)的路径能否构成回文串 考虑直接拿一个队列来转移,队列里存的都是\(f_{i,j}=1\)的点对,然后每次枚举两边的边更新答案并扩展即可 但是这样的复杂度是\(O(m^2)\)的,不够优秀.我们发现其实这种方法的复杂度瓶颈在于有很多无用边导致我们浪费了复杂度,因此我们考虑删去一些边 我们首先在原图上把所有同色点间的边连起来,由于每个点可以经过任意次,因此我们只需要考虑奇偶…
传送门 这题真的牛皮,还好考场没去刚( 这题口胡起来真的简单 首先枚举D点,然后对其他所有点按极角排序,同时记录到D的距离.然后按照极角序枚举A,那么鱼尾的两个点的极角范围就是A关于D对称的那个向量,然后左右各\(\frac{\pi}{2}\),因为A的极角增大,区间也会往后移,然后问题就是一个范围内同距离点对数,学过莫队的都会吧(逃 然后处理BC,一对合法的BC,首先要和AD垂直,然后BC中点要落在线段AD(不含端点)上,那么,BC中垂线必须唯一(中垂线的斜率和截距唯一),并且BC对应的中点的…
传送门 神™这题暴力能A,这出题人都没造那种我考场就想到的数据,难怪我的垃圾做法有分 先考虑没有撤销操作怎么做,因为每次插入一段一样的字符,所以我们可以把\(x\)个字符\(c\)定义为\(cx\),然后用这种新字符做\(\mathrm{kmp}\).但是直接把一般的\(\mathrm{kmp}\)搬过来做是错的.例如\(yybbbyybb\),最后一个b的\(next\)是第二个b,但是题目有个限制,每次往后加的字符不会和上一个字符相同,那么现在往后加任何字符,因为都不等于b,所以就一定无法继…
传送门 关于这题答案,因为在所有行,往后跳到任意一行的\(w_{i,j}\)都是一样的,所以可以算出跳\(x\)步的答案然后乘上\(\binom{l}{x}\),也就是枚举跳到了哪些行 如果记跳x步的方案是\(f_x\),\(n=1\)时,\(f_x={w_{1,1}}^x\);\(n>1\)时,因为n很小,转移可以写成矩阵,然后矩阵快速幂后就是初始矩阵乘转移矩阵的第一行第\(y\)列的值 后面记\(w\)为对应的转移矩阵,\(a\)为初始矩阵(省略下标\(_{(1,y)}\)) 我们把答案式子…
传送门 这个什么鬼证明直接看uoj的题解吧根本不会证明 首先方案一定是若干段等值的\(B\),然后对于一段,\(B\)的值应该是\(A\)的平均值.这个最优方案是可以线性构造的,也就是维护以区间平均值为权值的单调栈,每次在后面插入一个元素,不断弹栈并与最后一个合并,直到平均值单调递增 然后这个单调栈是可以两个区间的单调栈直接合并的,因为合并完后新单调栈的断点集合是原来两段的断点集合的子集.合并直接暴力就好了合并的话一定是前面那个的一段后缀的后面的一段前缀合并,然后后面的前缀位置(就是合并区间的右…