上一页 1 ··· 27 28 29 30 31 32 33 34 35 ··· 37 下一页
摘要: 对网格图黑白染色,在黑色格中填不同的质数,白色格中填相邻黑色格的lcm+1,但这样会超过1e15的上限将网格图划分为两类对角线,每一条对角线选一个质数,然后每一个点就是两条对角线的质数相乘,而白格的值就仅为四个较小质数的乘积+1(注意不能让两个大质数配到一起) 1 #include<bits/std 阅读全文
posted @ 2019-10-07 06:15 PYWBKTDA 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 先按照d从小到大排序,遍历所有建筑i,如果能修,显然要去修的考虑不能修,显然选择让之前所需时间最多的那个建筑不修(如果就是自己那就放弃),用堆来维护 1 #include<bits/stdc++.h> 2 using namespace std; 3 struct ji{ 4 int t,d; 5 阅读全文
posted @ 2019-10-07 06:15 PYWBKTDA 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 二分答案,考虑答案是否会大于等于这个mid,显然所有数值分为两类:大于等于mid和小于mid将n个数转化为01串,如果0和1不相邻,那么答案就是第一个数/最后一个数(一定会相同),考虑有连续两个0/1否则连续的两个数一定会上升到某一个高度并变为一个数,因此只需要找到最高的一层全部变成0/1时,也就是 阅读全文
posted @ 2019-10-07 06:13 PYWBKTDA 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 有一个结论:两个区间的最长路的端点一定是这两个区间中的最长路端点(4选2),所以可以用线段树来维护区间最长路的两个端点,然后最终合并即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 #define L ( 阅读全文
posted @ 2019-10-07 06:12 PYWBKTDA 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 将s所有长度为d/2的子串放进ac自动机中,直接匹配就可以判定半现串了再对其做一个差分,询问一个前缀的半现串个数,在ac自动机上数位dp,f[i][j][0/1]表示走了i步(i位的字符串),走到节点j,是否达到上限的方案数对于ac自动机上的结束节点,直接重置并累计答案即可 1 #include<b 阅读全文
posted @ 2019-10-07 06:11 PYWBKTDA 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 首先可以发现对于两条链来说,显然是对两边都排好序,然后大的配大的,小的配小的(正确性比较显然),最后再加入根(根只能单独选)这个结果其实也可以理解为将所有max构成一条新的链,求出因此,对于每一个结点计算出答案,然后与别的点合并得到父亲,用启发式合并+set时间复杂度为两个log。 1 #inclu 阅读全文
posted @ 2019-10-03 22:09 PYWBKTDA 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 分治,维护一个dp数组,当递归到区间[l,r]时,需要保证这个dp数组维护的是除去[l,r]以外的dp数组维护其实很简单,就是递归左区间是先将右区间加入,然后再将左区间加入(要先复原)然后递归右区间即可 1 #include<bits/stdc++.h> 2 using namespace std; 阅读全文
posted @ 2019-10-03 14:20 PYWBKTDA 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 先考虑一个联通块,可以发现这个联通快内不会存在两个偶数的点证明:如果存在,那么这两个点的某一条路径上的边全部反过来,可以使答案+2,即答案为点数或点数-1同时,发现答案的奇数点数一定与边数同奇偶,那么答案就被确定了,具体实现可以使用并查集 1 #include<bits/stdc++.h> 2 us 阅读全文
posted @ 2019-10-03 14:19 PYWBKTDA 阅读(185) 评论(0) 推荐(0) 编辑
摘要: (以下用$Sa=\sum_{j=1}^{i}xi\cdot ai$,Sb和Sc同理)令f[i][x]表示前i个数,$Sa\le x\le Sb$时最小的Sc考虑第i个数是否选择,可以得到递推式$f[i][x]=min(f[i-1][x],min(f[i-1][x-j])+ci)$(j满足$ai\le 阅读全文
posted @ 2019-10-03 14:18 PYWBKTDA 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 先可以将所有出度为0的节点连向一个点,然后问题变为求到这个点的必经之点这其实是一道模板题,因为有一个东西叫做支配树容易发现一个点的必经之点都是一条链,其实可以把这条链上最浅的点作为这个点的父亲,那么一个点的所有必经之点显然就是他到根的路径上的点具体来说,这个点的父亲就是他所有联通的点的lca(不能叫 阅读全文
posted @ 2019-10-02 16:35 PYWBKTDA 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 分类讨论(以下仅考虑行,列的情况):1.4行的,求出每一行的和后找到4个最大值即可;2.3行1列,枚举列,再将每一行最大值减去那一列的值后取3个最大值得和即可;3.2行2列,发现行和列是等价的,因此可以通过旋转使得$m\le n$,又因为$nm\le 10^5$,所以$m\le \sqrt{10^5 阅读全文
posted @ 2019-09-28 12:26 PYWBKTDA 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 将每一个ai表示为$ai=ki\cdot m+ri$,即满足$m\sum ki+\sum ri=n$且$0<ri<m$枚举$S=\sum ri$(S范围是$k\le S\le k(m-1)$且与n同余,只有k个值),之后相当于让$\sum ki=(n-S)/m$,根据插板法以$o(k)$(c的定义) 阅读全文
posted @ 2019-09-23 18:18 PYWBKTDA 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 简化问题:如果没有2操作,答案是多少贪心:修改-一定修改最前面的,修改+一定修改最后面的,正确性显然而通过1操作,要完成两步:1.让最终结果为q;2.让前缀和非负,通过贪心可以获得最小值(具体来说,假设初始有nq个+,np个-,第一步操作后前缀最小值为k,那么答案为$(|p+nq-np-q|/2+\ 阅读全文
posted @ 2019-09-21 10:53 PYWBKTDA 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 可以用并查集维护连通性,删除可以用按置合并并查集,但删掉一条边后无法再维护两点的联通性了(因为产生环的边是不加入的)暴力思路是, 考虑前i个操作后边的集合,暴力加入即可,但复杂度是$o(n^2)$的用分块,对于每一个块,先求出前面所有块操作后边的集合,去掉这个块内删掉的边,这个并查集一定是之后这个块 阅读全文
posted @ 2019-09-21 06:26 PYWBKTDA 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 这道题如果没有功率的限制,显然就是一个裸的2-sat 考虑将功率的限制也放在图上:如果选择了功率i,那么功率区间不包含它的点只能不选,连边即可 但是这样建图的边数是o(n^2),需要优化 将功率区间分为两种,一种在这个点前面,另一种在这个点的后面 同样将功率也裂成两个点,分别连向这两种区间,因为功率 阅读全文
posted @ 2019-09-18 07:10 PYWBKTDA 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 下面先给出比较简单的KD树的做法—— 根据圆心建一棵KD树,然后模拟题目的过程,考虑搜索一个圆 剪枝:如果当前圆[与包含该子树内所有圆的最小矩形]都不相交就退出 然而这样的理论复杂度是$o(n^2)$,所以会被出题人卡了 但是如果将坐标系旋转45度,即对于$(x,y)$,变为$((x-y)/\sqr 阅读全文
posted @ 2019-09-17 18:24 PYWBKTDA 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 先用两次猜出第一个字符,后面就不会出现这个字符了 (我们假设这个字符是c0,其余三种字符分别是c1、c2和c3) ,然后考虑已知s的前i个字符(不妨就s),来推出后面的字符 询问:s+c1和s+c2,如果不是就是c3了,期望是5/3n次的 询问:s+c1+s+c2+c1+s+c2+c2+s+c2+c 阅读全文
posted @ 2019-09-15 17:24 PYWBKTDA 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 先离线,将询问按照时间排序,维护商店出现和消失 对于每一个询问,先二分枚举答案,假设是ans, 即要求对于区间[l-ans,l+ans],商店的种类数是k(l是询问的位置) (当然需要先将所有位置离散一下,l-ans和l+ans找到等价的位置) 那个条件并不是很好处理,但可以转化成另一个条件: l+ 阅读全文
posted @ 2019-09-15 17:09 PYWBKTDA 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 修改:维护g[i][j]表示第i个数为j的概率,从前往后转移 转移方程:g[id][i]=g[id][i-1]*p+g[id][i]*(1-p),初始g[i][a[i]]=1 询问:对于每一个人i,输出sigma(P(除了i有j个正数)/(j+1))*P(i是正数) P(i是正数)就是1-g[i][ 阅读全文
posted @ 2019-09-15 17:07 PYWBKTDA 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 很显然,每一步所选的剑和怪物都是确定的,可以先求出来(不用写平衡树,直接用multiset即可,注意删除要删指针,以下假设第i次攻击用ki攻击的剑,攻击第i只怪) 首先判断无解,即如果存在ai使得gcd(ki,pi)不是ai的约数就无解,否则将ki、pi、ai同除gcd(ki,pi),并用扩欧求出k 阅读全文
posted @ 2019-09-13 15:14 PYWBKTDA 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 先考虑l=1,r=|s|的部分分,需要求出t每一个前缀的不是s子串的最长后缀,记作pp[k],有以下限制:1.pp[pos[k]]<len(pos[k]表示k的某一个结束位置),因为不能被匹配 2.len[fa[k]]<len<=len[k],因为这个点上本来就只有这些串 由此得到答案为sigma( 阅读全文
posted @ 2019-09-13 15:11 PYWBKTDA 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 结论:一个序列是好序列当且仅当其不存在长度为3的下降子序列 证明:考虑提示,一个长度为3的下降子序列必然会交换三次, 而这三次带来的收益实际上只有2,因此不合法 同时还可以得到:第i个数,要么是前缀最大值,要么是之前的mex (即要么让他之前没有比他大的,要么让他之后没有比他小的) 用f[i][j] 阅读全文
posted @ 2019-09-11 15:07 PYWBKTDA 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 首先肯定要预处理出每一个点到1的最短路(别写spfa) 然后以海拔为边权,建一棵kruskal重构树 用倍增找到vi最后一个小于pi的祖先,然后在子树中取min(预处理) 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 400 阅读全文
posted @ 2019-09-10 15:08 PYWBKTDA 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 这道题需要用到扩展欧拉定理,即$a^{b}\equiv a^{b\ mod\ \phi(m)+\phi(m)}(mod\ \phi(m))$ 不断递归计算,奇数的phi值一定是偶数,偶数的phi值一定会除以2,即log次递归 还有phi可以用线性筛计算,也可以在线计算(复杂度分别是$o(p+Tlog 阅读全文
posted @ 2019-09-04 14:25 PYWBKTDA 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 这只是一道模拟题而已啊(大雾)但是需要掌握一些简单的解析几何知识个人觉得写结构体没什么必要啊,直接写过程就行了主要是根据题目最后给出的顺序来做,有一下坑点:1.只能存存在的蚂蚁,否则会tle(高攻击塔)2.出生时间是年龄+13.game over了年龄不用+14.血量是先乘上4再取整5.(0,0)有 阅读全文
posted @ 2019-09-03 18:01 PYWBKTDA 阅读(224) 评论(0) 推荐(0) 编辑
上一页 1 ··· 27 28 29 30 31 32 33 34 35 ··· 37 下一页