上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 38 下一页
摘要: 对于每条对角线,若需要改变方向,则连边权为1的边,否则连边权为0的边,然后求从左上角到右下角的最短路即可。对于本题,可以用BFS来求最短路,每次扩展时把连通块内所有可以通过0边权的边走到的点加入队尾。时间复杂度$O(n^2)$。#includeconst int N=510,M=251010,T=M... 阅读全文
posted @ 2015-08-23 22:56 Claris 阅读(408) 评论(0) 推荐(0)
摘要: 以深度建立线段树,线段树父亲节点向儿子节点连边,然后用线段树合并可以得到任何一个点子树的线段树,只需向对应节点的线段树中的$O(\log n)$个点连边即可。为了保证连边关系不发生混乱,线段树需要进行可持久化。这样建图,点数和边数都是$O(n\log n)$级别的,再求出强连通分量,用排列组合求出答... 阅读全文
posted @ 2015-08-23 19:10 Claris 阅读(387) 评论(0) 推荐(0)
摘要: 设f[i]表示以i为结尾的最长的合法序列的长度,=号直接维护,号用两棵树状数组维护即可,时间复杂度$O(n\log n)$。#include#define N 1000000int n,k,i,j,a[N],e[N+1],bl[N+1],bg[N+1],f[N],ans;char s[N];inli... 阅读全文
posted @ 2015-08-19 23:33 Claris 阅读(236) 评论(0) 推荐(0)
摘要: 首先将挂饰按照挂钩个数从大到小排序,然后DP设f[i][j]处理完前i个挂饰,还有j个多余挂钩的最大喜悦值,则f[0][1]=0f[i][j]=max(f[i-1][max(j-a[i],0)+1]+b[i],f[i-1][j])时间复杂度$O(n^2)$。#include#include#defi... 阅读全文
posted @ 2015-08-19 19:28 Claris 阅读(346) 评论(0) 推荐(0)
摘要: 按位考虑,逐步确定答案。设当前是第i位,求出第i位的前缀异或和。若存在m个0且所有数字异或和为0,那么答案的这一位可以为0,并把所有1的位置给标记为不可选。否则答案的这一位只能是1。时间复杂度$O(n\log n)$。#include#define N 500010int n,m,i,j,t,b[N... 阅读全文
posted @ 2015-08-19 17:35 Claris 阅读(420) 评论(0) 推荐(1)
摘要: 设g[i][j]为i串至少加上几个字符后才能包含j,可以通过Hash求出。然后就是求经过m-1条边的最短路,用倍增加速Floyed即可,时间复杂度$O(n^3\log m)$。#include#include#define rep(i,n) for(int i=0;ib)a=b;}struct ma... 阅读全文
posted @ 2015-08-19 17:31 Claris 阅读(274) 评论(0) 推荐(0)
摘要: 对于任意两个建筑物,以它们之间的最短路为边权求出最小生成树。则询问(x,y)的答案为最小生成树上x到y路径上边权的最大值。BFS求出离每个点最近的建筑物以及到它的距离,可以发现只有交界处的边才有用,用这些边求MST即可。#include#includeusing namespace std;cons... 阅读全文
posted @ 2015-08-19 02:12 Claris 阅读(542) 评论(0) 推荐(0)
摘要: 考虑按时刻从早到晚模拟,计算出f[i]:到达i点的最晚出发时间g[i]:为了赶上第i辆车的最晚出发时间然后将所有到达n号点的巴士按到达时间排序,查询的时候二分查找即可。时间复杂度$O(n\log n)$。#include#include#include#include#define N 300010... 阅读全文
posted @ 2015-08-18 21:13 Claris 阅读(581) 评论(0) 推荐(0)
摘要: 考虑按x坐标排序后分治,只需考虑计算左下角在[l,mid],右上角在[mid+1,r]的矩形数。对于[l,mid]的点,从右往左考虑,求出它可以贡献到的纵坐标区间。对于[mid+1,r]的点,从左往右考虑,求出它可以接受的纵坐标区间。然后扫描线+Treap维护即可,时间复杂度$O(n\log^2n)... 阅读全文
posted @ 2015-08-18 03:10 Claris 阅读(798) 评论(0) 推荐(0)
摘要: 莫队算法,考虑如何快速维护最大的重要度。考虑到答案一共只有$O(n)$种本质不同的取值,于是可以先通过$O(n\log n)$的排序处理出这些值的大小关系,并将这些值离散化,同时对每种事件的每个出现次数维护两个指针pre和nxt,分别表示出现次数减少或增加一后是第几小。然后对这些取值进行分块,每块维... 阅读全文
posted @ 2015-08-18 00:31 Claris 阅读(968) 评论(0) 推荐(1)
摘要: 如果一条边可行,那么删掉这条边后,剩下的图是二分图且该边的两端点颜色相同。那么可行的边必然属于所有奇环的交集,且不属于任何偶环。随便取一棵生成树,对于一条非树边,它形成了环:若是偶环,则将环上的边都标记为不能选。若是奇环,则将环上的边经过的奇环数都加一。可以用树链剖分维护前缀和做到$O(m\log ... 阅读全文
posted @ 2015-08-17 21:41 Claris 阅读(956) 评论(0) 推荐(2)
摘要: 若直线的斜率为0或者不存在斜率,则有$nC(m,3)+mC(n,3)$种方案。若直线的斜率不为0,只需考虑斜率为正的情况,最后答案再乘以2即可。枚举两个点的坐标差,设$t=\min(n,m)$,则有:\[\begin{eqnarray*}ans&=&\sum_{i=1}^n\sum_{j=1}^... 阅读全文
posted @ 2015-08-17 17:28 Claris 阅读(521) 评论(0) 推荐(0)
摘要: 若能得到一个和为t的区间,那么至少去掉两端点中任意一个后必定能得到和为t-2的区间。所以只需要分别找到和最大的和为奇数和偶数的区间,然后$O(n)$完成构造即可。#include#define N 1000010int n,m,i,s[N],b,c,d,t,l,r,f[N='0')&&(c='0')... 阅读全文
posted @ 2015-08-17 01:53 Claris 阅读(277) 评论(0) 推荐(0)
摘要: 将a从小到大排序可以得到最优解,设f[i][j]表示前i个用了j种颜色的最小累计误差,则f[i][j]=min(f[k-1][j-1]+w(k,i))。其中w(k,i)为[k,i]区间里所有数与中位数的差值的绝对值之和,有w(k,i)=w(k+1,i)+a[(k+i+1)>>1]-a[k]。时间复杂... 阅读全文
posted @ 2015-08-16 01:01 Claris 阅读(277) 评论(0) 推荐(0)
摘要: 首先模拟一遍得到n个同余方程,然后用扩展欧几里得求出最小的可行解即可,时间复杂度$O(n^2)$。#include#define N 30int n,i,j,k,x,y,a[N],b[N],d[N],ans;namespace Solve{int flag=1,k=1,m=0,d,x,y;int e... 阅读全文
posted @ 2015-08-15 17:21 Claris 阅读(367) 评论(0) 推荐(0)
摘要: 考虑到$lcm(1,2,3,4,5,6)=60$,所以操作序列每60秒一个循环。将操作表示成转移矩阵的形式,预处理出前60秒的转移矩阵以及它们的乘积$B$。那么t秒的转移矩阵为前$t\bmod 60$个转移矩阵的乘积乘以$B^{\lfloor\frac{t}{60}\rfloor}$。用矩阵快速幂加... 阅读全文
posted @ 2015-08-14 23:12 Claris 阅读(535) 评论(0) 推荐(0)
摘要: 设f[i][j]表示串ij可以由哪些字母成长过来,用二进制压位表示。设g[i][j]表示给定串中[i,j]这个区间一开始可以由哪些字母成长多来,用二进制压位表示。设h[i]表示给定串前i位最少需要几个字母,h[i]=min(h[j]+1),j#include#define N 105int T,n,... 阅读全文
posted @ 2015-08-14 20:50 Claris 阅读(604) 评论(0) 推荐(0)
摘要: 二分答案mid,将差距先都调到mid以内。首先从左往右扫,a[i]=min(a[i],a[i-1]+mid)。然后从右往左扫,a[i]=min(a[i],a[i+1]+mid)。枚举要变为0的位置,求出L,R使得:a[L]>(i-L)mida[R]>(R-i)mid此时只需要把[L,i]和[i,R]... 阅读全文
posted @ 2015-08-14 03:23 Claris 阅读(575) 评论(0) 推荐(0)
摘要: 设b[i]为将i分解质因数后所有质数的指数和,则$d(i,j)=b[i]+b[j]-2b[\gcd(i,j)]$。设d[i]为i的倍数中的最优解和次优解。对于i,枚举它的约数k作为gcd,然后用d[k]去更新ans[i]即可。时间复杂度$O(n\log n)$。#include#define N 1... 阅读全文
posted @ 2015-08-13 22:54 Claris 阅读(411) 评论(0) 推荐(0)
摘要: 对于根,要让它的排名尽量小,也就是要让右子树的点数尽量多。于是从大到小枚举右子树的点数,用Catalan数计算方案数,直到找到相应的右子树的点数为止。此时根的排名已经确定,接下来要让左子树的代码的字典序尽量小,递归解决即可。#includeint n,k,i,j,f[20];void solve(i... 阅读全文
posted @ 2015-08-12 14:56 Claris 阅读(346) 评论(0) 推荐(0)
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 38 下一页