luogu P5286 [HNOI2019]鱼】的更多相关文章

传送门 这题真的牛皮,还好考场没去刚( 这题口胡起来真的简单 首先枚举D点,然后对其他所有点按极角排序,同时记录到D的距离.然后按照极角序枚举A,那么鱼尾的两个点的极角范围就是A关于D对称的那个向量,然后左右各\(\frac{\pi}{2}\),因为A的极角增大,区间也会往后移,然后问题就是一个范围内同距离点对数,学过莫队的都会吧(逃 然后处理BC,一对合法的BC,首先要和AD垂直,然后BC中点要落在线段AD(不含端点)上,那么,BC中垂线必须唯一(中垂线的斜率和截距唯一),并且BC对应的中点的…
本来想写个改题记录的然后想了想改不完所以就分开写了= = https://www.luogu.org/problemnew/show/P5286 显然枚举A,D,然后鱼头和鱼身分开来考虑. 鱼身:先枚举B,C,那么BC的中点一定在线段AD(不包含端点)上,对于每一条直线维护一个vector存所有的点,将这个BC的中点插入进线段BC的垂直平分线的vector,然后对于一组AD,鱼身的方案数是vector上AD中间的点数,可以用upper_bound求. 鱼尾:枚举D,对所有其他点极角排序,用双指针…
Luogu5286 \(2019.4.14\),新生第一题,改了\(3\)个小时 题解-租酥雨,和出题人给的正解一模一样 枚举\(AD\),分别考虑鱼身\(BC\)和鱼尾\(EF\) 到\(E\),\(F\)距离相等的判断要避免精度问题,可以离散化其平方以后用一种莫队思想搞 关键是怎么枚举垂直,还要控制中点也在\(AD\)上 判垂直和平行的关键就是 与向量\((a,b)\)点积相同的点在一条垂直向量\((a,b)\)的直线上,与向量\((a,b)\)叉积相同的点在一条平行向量\((a,b)\)的…
看到数据范围n<=1000,但感觉用O(n^2)不现实,所以考虑方向应该是O(n^2logn). 一种暴力做法:用vector存到1点相同的2点和到2点相同的1点,然后枚举A,枚举BC,再枚举D,然后枚举EF,O(n^4),但复杂度远远不满(符合条件的太少,而且也卡不掉),所以可以获得40pts的好成绩. 正解: 首先可以想到一点:确定A,D两点后,因为鱼身和鱼尾互不影响,可以分开计算鱼身和鱼尾,然后将二者数量相乘即可.鱼尾比较好算,直接把所有点按照极角坐标排序,然后枚举A时转移即可,复杂度O(…
非常妙的一道思博题啊,不愧是myy出的题 首先我们考虑一个暴力DP,直接开一个数组\(f_{i,j}\)表示\(i\to j\)的路径能否构成回文串 考虑直接拿一个队列来转移,队列里存的都是\(f_{i,j}=1\)的点对,然后每次枚举两边的边更新答案并扩展即可 但是这样的复杂度是\(O(m^2)\)的,不够优秀.我们发现其实这种方法的复杂度瓶颈在于有很多无用边导致我们浪费了复杂度,因此我们考虑删去一些边 我们首先在原图上把所有同色点间的边连起来,由于每个点可以经过任意次,因此我们只需要考虑奇偶…
传送门 神™这题暴力能A,这出题人都没造那种我考场就想到的数据,难怪我的垃圾做法有分 先考虑没有撤销操作怎么做,因为每次插入一段一样的字符,所以我们可以把\(x\)个字符\(c\)定义为\(cx\),然后用这种新字符做\(\mathrm{kmp}\).但是直接把一般的\(\mathrm{kmp}\)搬过来做是错的.例如\(yybbbyybb\),最后一个b的\(next\)是第二个b,但是题目有个限制,每次往后加的字符不会和上一个字符相同,那么现在往后加任何字符,因为都不等于b,所以就一定无法继…
传送门 这是什么神仙操作... 首先要注意一些性质.首先每一个\((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)\)这条边,把多边形分成\(…
传送门 关于这题答案,因为在所有行,往后跳到任意一行的\(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\)的平均值.这个最优方案是可以线性构造的,也就是维护以区间平均值为权值的单调栈,每次在后面插入一个元素,不断弹栈并与最后一个合并,直到平均值单调递增 然后这个单调栈是可以两个区间的单调栈直接合并的,因为合并完后新单调栈的断点集合是原来两段的断点集合的子集.合并直接暴力就好了合并的话一定是前面那个的一段后缀的后面的一段前缀合并,然后后面的前缀位置(就是合并区间的右…
点此看题面 大致题意: 给你\(n\)个点,让你求鱼形图的数量. 核心思路 首先,考虑到\(n\)这么小,我们可以枚举线段\(AD\),再去找符合条件的\(BC,EF\). 然后,不难发现\(BC\)与\(EF\)互不影响,因此我们可以分开求对于已知\(AD\)的\(BC\)与\(EF\)的方案数,然后将其相乘. 那么我们现在的问题就在于,如何求出\(BC\)与\(EF\)的方案数了. \(BC\)的方案数 预处理 考虑到\(AB=AC,BD=CD\),用我这点可怜的初中数学知识,都能证明出\(…