上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 37 下一页
摘要: 题中所给的判定条件似乎比较神奇,那么用严谨的话来说就是对于两个格子(x,y)和(x',y'),如果满足:1.$x\le x'$;2.从(x,y)通过x,x+1,……,n行,允许向四个方向走,不允许经过石头的位置/画外,可以到达(x',y')若(x,y)有水,那么(x',y')也有水这个性质似乎并没有 阅读全文
posted @ 2020-01-30 21:48 PYWBKTDA 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 先考虑不要求有洞,那么可以将所有权值排序,然后不断插入,那么一个连通块就是一个答案,加上连通块大小即可考虑并查集如何判断是否有洞,可以发现对于任意一个无洞的直角多边形,都有$90度内角-90度外角=4$,而如果有洞显然就不是了(容易发现如果有k个洞,那么上述的值就应是$4-4k$)这个角度看上去很难 阅读全文
posted @ 2020-01-28 18:23 PYWBKTDA 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 分治,考虑分治到[l,r]的区间(设$mid=(l+r)/2$),将询问分为两类:1.在左/右区间,直接递归下去;2.跨越中间,那么处理出两个数组:L[i][j]表示左区间在开头第i个位置,以数字j为结尾的上升子序列个数(不跨越mid),右区间同理(L和R的计算很简单,只需要再处理出一个L[i][j 阅读全文
posted @ 2020-01-27 13:08 PYWBKTDA 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 由于交换是相邻交换,所以分为两类:1.左右区间内部交换,那么一定会让逆序对数量$\pm 1$,也就是说如果没有左右区间之间交换,那么答案就是$|ansL-ansR|$(ans表示逆序对数量)2.左右区间之间交换,考虑枚举左边最终有多少个1,不妨假设比原来多(原来少一样,但不能都异或1之后重复一遍,会 阅读全文
posted @ 2020-01-26 18:39 PYWBKTDA 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 考虑用f[i][j]表示以i为起点(i是时间,所以要离散)选$2^j$条线段(这里不是时间)最小的终点,预处理用倍增的方式来求即可预处理出这个数组后,就可以很快的求出在$[l,r]$的时间内最多能选多少条线段,类似于树上的倍增(注意判断超过最大时间的情况)然后从前往后枚举每一段时间,考虑能否加入,当 阅读全文
posted @ 2020-01-19 11:08 PYWBKTDA 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 考虑将三个矩形按某种方式划分为再三个大矩形中找最大值,容易发现只有6种划分方式,分为两类:1.4种,考虑第一条横/竖和第二条在第一条的两侧,这一类情况只需要预处理出左上/左下/右上/右下的最大子矩阵即可2.2种,两条横线/竖线划分,以横线为例,只需要处理处每一行的答案,然后,然后简单维护一下即可 1 阅读全文
posted @ 2019-12-30 20:25 PYWBKTDA 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 考虑令$bi=ai-a_{i-1}$,那么每一次操作相当于让$bi-=x$且$b_{i+1}+=x$,相当于从i向i+1移动x个石子,那么容易发现偶数堆没有用处,因为另一方可以用同样的操作,因此问题相当于从n往前的奇数堆的nim游戏,异或即可 1 #include<bits/stdc++.h> 2 阅读全文
posted @ 2019-12-28 10:04 PYWBKTDA 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 设所有砝码质量离散去重后为b1,b2,……,bk,那么将每一个容器都表示为$wi-C=\sum_{i=1}^{k}bi\cdot si$(其中$C<b1$且对于$1\le i<k$,有$bi\cdot si<b_{i+1}$),把他看成一个进制,直接作减法即可 1 #include<bits/std 阅读全文
posted @ 2019-12-24 10:34 PYWBKTDA 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 用f[i]表示前i个数,i必须被贡献的答案,考虑转移,枚举下一个被贡献的数j,那么j需要满足:1.$j<i$;2.$a[j]<a[i]$;3.$a[i]-(i-j+1)\le a[j]$,化简后即$j-a[j]\le i-a[i]$;4.$a[i]\le i$这是一个三维偏序,但发现第二个限制和第三 阅读全文
posted @ 2019-12-21 05:59 PYWBKTDA 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 转化题意,如果一个点k符合条件,当且仅当k能到达1和n考虑如果l和r($l<r$)符合条件,容易证明那么[l,r]的所有点都将会符合条件,因此答案是一个区间枚举答案区间[l,r],考虑如何判定答案是否合法,也就是要求满足l能到达n且r能到达1,那么预处理出f1[i]表示i能到达1的最少边数,f2[i 阅读全文
posted @ 2019-12-20 13:46 PYWBKTDA 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 先贪心,容易发现如果两个点中间没有点对,那么一定可以先把这两个点消掉分析一下,就可以发现这样两个点的答案就是这两个点对中间不成对的点数量扫描过去,线段树维护每一个点的权值(是否会被算入答案)即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 # 阅读全文
posted @ 2019-12-18 16:08 PYWBKTDA 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 首先$C/2=x_{max}+y_{max}-x_{min}-y_{min}=max(x_{max},y_{max})-min(x_{min},y_{min})+min(x_{max},y_{max})-max(x_{min},y_{min})$,容易发现前两项都是定值,那么就是要最小化后面的数字构 阅读全文
posted @ 2019-12-18 15:53 PYWBKTDA 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 首先可以发现$2^k$模3意义下有循环节,也就是1,-1,1,-1……考虑对于x个1,y个0,判断是否存在3的倍数1.x为偶数时一定可以,选择等量的1和-1即可2.x为奇数,要满足$x\ge 3$且$y\ge 2$,这是可以用3个0*(-1)和3个1*1来抵消掉(如果y=2时也可以,因为此时总共有奇 阅读全文
posted @ 2019-12-17 20:19 PYWBKTDA 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 将这张图化简,不断删掉度为1的点(类似于拓扑排序),构成了一张由环组成的图考虑一个连通块中,设点数为n,边数为m(已经删掉了度为1的点),那么一共只有三种情况:1.一个环($n=m$),一定为YES2.多个环嵌套($n+1<m$),一定为NO3.两个环($n+1=m$),其实可以看成有两个点(可以重 阅读全文
posted @ 2019-12-17 15:11 PYWBKTDA 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 记$bi=b_{i-1}+ai$,$ci=c_{i-1}+bi$,那么答案就是$\sum_{i=l}^{r}\sum_{j=0}^{n-i}b_{j+i}-bj=(r-l+1)cn-\sum_{i=l-1}^{r-1}ci-\sum_{i=n-r}^{n-l}ci$,用线段树维护ci数组考虑对于[l 阅读全文
posted @ 2019-12-16 18:41 PYWBKTDA 阅读(217) 评论(0) 推荐(1) 编辑
摘要: 考虑将最上中最左的跳蚤孤立,容易发现他的上面和左面没有跳蚤,因此只需要将他的右边和下边替换掉就可以了答案为-1有两种情况:1.c>=n*m-1;2.c=n*m-2且这两只跳蚤相邻对于其他情况,将所有跳蚤建图后判断:1.是否有多个连通块;2.是否有割点即可,由于跳蚤数量很多,容易发现只需要选择周围5* 阅读全文
posted @ 2019-12-15 13:01 PYWBKTDA 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 很容易想到哈夫曼树,容易扩展得到贪心:优先选最小的k个合并,堆维护即可为了保证深度最小,可以加入深度权值,在权值相同时选择当前深度最小的即可(注意:由于可能最后一次不足k个,那么显然可以将这些不足的放到最深的位置来减小答案,需要补上权值为0的点来保证每一次都有k个) 1 #include<bits/ 阅读全文
posted @ 2019-12-11 16:43 PYWBKTDA 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 对于一个分数x/y(x和y互素),在k进制下为纯循环当且仅当y和k互素证明:任意一个分数都可以写成0.abbbbbbbb的形式(不妨假设a尽量短),设a的位数为l1,b的位数为l2,那么原分数即$\frac {b-a}{(k^{l2}-1)*k^{l1}}$必要性:当l1=0的时候分母与k互素,即纯 阅读全文
posted @ 2019-12-11 13:31 PYWBKTDA 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 将所有区间按照长度排序,枚举最小长度和最大长度,然后判断区间内是否存在符合条件的m个区间这个东西由于右端点单调递增,所以即:1.支持插入区间;2.支持删除区间;3.维护是否存在被m个区间覆盖的点对于3操作,可以视为维护区间max,即区间加减和区间max,线段树即可 1 #include<bits/s 阅读全文
posted @ 2019-12-04 21:08 PYWBKTDA 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 由于字符串是AABB的形式,枚举AA和BB中间的位置,分别考虑AA和BB的数量,乘起来sigma一下即为答案以下考虑AA的情况(BB同理),枚举A的长度,然后按照这个长度分为若干块,那么每一个A一定可以表示成某一段的结尾+下一段的开头,同时两个A又要连续,也就是相邻两块的lcp和lcs,最终答案用差 阅读全文
posted @ 2019-12-04 16:23 PYWBKTDA 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 询问相当于要求长度为k的公共子串个数,很容易联想到hash,由于询问是对全局的,因此对全局开一个hash的桶对于合并/删除操作,将中间新产生/需要删除的字符串暴力修改即可,单次复杂度最坏为$o(k^{2})$这样看上去复杂度是$o(nk^{2})$的,但考虑最终的字符串总数$o(nk)$,删除操作最 阅读全文
posted @ 2019-11-27 18:01 PYWBKTDA 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 暴力枚举$2^{d}$表示这d个点中一定不选A或一定不选B(那么就包含了所有情况),然后就对原图跑2-sat即可注意一个细节,如果某一条限制中初始点不合法,就不用管了;如果最终点不合法,那么相当于初始点不能选,可以用向同类连边的方式来标记一定不能选 1 #include<bits/stdc++.h> 阅读全文
posted @ 2019-11-27 18:00 PYWBKTDA 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 考虑暴力,即需要考虑如何实现$\pm 2^{k}$,相当于要找到之后的第一个0或者之前的第一个1(维护区间是否全0/1即可),然后区间重置,可以用线段树维护,复杂度为$o(900n)$(a的划分和线段树),无法通过但由于数据范围很大,这样过不了,可以想到压位,每30位二进制压为一个数,那么复杂度降为 阅读全文
posted @ 2019-11-26 15:21 PYWBKTDA 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 暴力dp,用f[i][j]表示前i个数,最后一个区间是(j,i]的最小答案,转移方程用可以用前缀和来优化,复杂度为$o(n^3)$(然后可以各种优化到$o(n^2)$,但这不需要)输出f[i][j],可以发现若f[i][j-1]和f[i][j]合法,那么$f[i][j]\le f[i][j-1]$证 阅读全文
posted @ 2019-11-20 22:03 PYWBKTDA 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 考虑枚举一个点k,求其为重心的方案数暴力的做法是,将其作为根搜索,设最大子树大小为s1,次大为s2,对割掉的子树分类讨论:1.在子树中,分两种情况(都可以用线段树合并来做) (1)从s1中切掉一棵大小为s3的子树,应该满足$2max(s2,s1-s3)\le n-s3$,即$2s1-n\le s3\ 阅读全文
posted @ 2019-11-20 14:33 PYWBKTDA 阅读(255) 评论(0) 推荐(0) 编辑
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 37 下一页