摘要:
观察单词表可以发现:对于长度为3的单词,前两个字母相同的单词不超过7个对于长度为4的单词,前两个字母相同的单词不超过35个于是首先$O(26*26*nm)$预处理出s1[x][i][j]表示(i,j)右上角里面字母x的出现次数s2[x][y][i][j]表示(i,j)右上角里面单词xy的出现次数枚举... 阅读全文
摘要:
直接BFS貌似复杂度飞起来了,于是我们用k-d tree优化找点的过程即可。时间复杂度$O(n\sqrt{n})$。#include#includeconst int N=10010,H=1000,R=1000000;int n,m,i,root,cmp_d,h=1,t,q[N],f[N],mx,m... 阅读全文
摘要:
从以每一位为中心的回文串长度可以用Manacher倒推出$O(n)$对相等和不等关系。将相等的用并查集维护,不等的连边。然后输出方案时若还没被染过色,则求一个mex。#include#define N 200010int n,m,i,x,r,p,f[N],g[N],fa[N],a[N],v[30];... 阅读全文
摘要:
[AMPPZ2014]The Lawyer 记录每天结束的最早的会议以及开始的最晚的会议即可。 [AMPPZ2014]Petrol 一遍spfa求出d[x]表示离x最近的加油站到x的距离。 对于每条边(x,y,w),将边权重置为d[x]+d[y]+w。 然后将边和询问按照权值从小到大排序,每次将所有 阅读全文
摘要:
注意到随机一组贪心解得到的团的大小不小于$\frac{N}{3}$的概率是很大的,所以一直随机下去,直到找到一组解即可,随机次数是常数级别的,所以复杂度为$O(n^2)$。#include#include#define N 3010int n,m,i,j,k,a[N],del[N],fin[N];b... 阅读全文
摘要:
求本质不同的第k小子串:求出后缀数组,从0开始扫到n-1,到sa[i]为止一共有sum[i]个本质不同的子串sum[i]=sum[i-1]+n-sa[i]-height[i]直到sum[i]>=k为止求第k小子串:构造后缀树,设f[x]表示以x为前缀的子串数目,g[x]表示以x为前缀的后缀数目查询时... 阅读全文
摘要:
若所有点同侧则表明将各个点带入直线解析式ax+by-c后得到的值均同号等价于最大值和最小值同号考虑CDQ分治,每一步分治的过程中求出上下凸壳,然后三分答案即可时间复杂度$O(n\log^2n)$#include#includetypedef long long ll;const int N=2000... 阅读全文
摘要:
设f[i][j]表示到(i,j)的方案数,则有$f[i][j]=\sum f[x][y](xconst int N=752,P=1000000007;int n,m,k,i,j,a[N][N],f[N][N],T,all,s[N*N],v[N*N];inline void read(int&a){c... 阅读全文
摘要:
百度空间马上要关闭了呢,赶紧转移到这里。。。 阅读全文
摘要:
当m取2时,k至少为$\frac{n}{2}$所以在最优解中每个数被选中的概率至少为$\frac{1}{2}$每次随机选取一个位置i,计算出其它数与$a_i$的差值,将差值分解质因数所有质因数中出现次数的最大值加上与$a_i$相等的数的个数就是选取i的情况下的最优解为了最大化m,需要将所有相同位置的... 阅读全文
摘要:
f[i]表示用i集合内的电影可以达到的最长时间f[i]向f[i|(1#includeconst int N=20,M=40010;int n,l,i,j,c,d[N],g[N][M],m,q[M],id[M],t[M],f[1b)ans=b;}inline void max(int&a,int b)... 阅读全文
摘要:
对于询问(x,y),恰经过一条非树边且不经过树上两点间路径的路径数为:·若x与y成祖先-孩子关系,假设y是x的祖先,z是y到x方向的第一个节点,则 ans=起点在x的子树里,且终点不在z的子树里的非树边数·若x与y不成祖先-孩子关系,则 ans=起点在x的子树里,且终点在y的子树里的非树边数由于不经... 阅读全文
摘要:
暴力枚举答案然后检验。#includeint n,m,i,j,k,a[100],b[100],cnt,ans;char s[20];int main(){ for(scanf("%d%d",&n,&m);i1)break;ans=i;} } if(cnt==1)for(i=0;i>i&1));... 阅读全文
摘要:
考虑离线,将删边操作倒过来变成加边,等价于询问每个点什么时候与1连通使用并查集维护,每次合并时如果有一边是1所在连通块,就把另一边的所有点的答案更新#include#define N 200010int n,m,i,j,x,y,son[N][2],del[N][2],q[N='0')&&(c='0'... 阅读全文
摘要:
按距离建立线段树,维护区间重量最小值然后跑一遍拓扑,每次将所有能取的加入队尾#include#include#define N 250010typedef long long ll;int n,i,x0,y0,nowp,x,y,r,c,v[N='0')&&(c='0')&&(c>1].d>1; b... 阅读全文
摘要:
令三元环(i,j,k)中i>j>k,则每条边只需要从大点连向小点设d[x]表示从x连出的边的条数从1到n枚举点i,然后枚举所有与i相连的边(i,x)(x#includeusing namespace std;const int N=100010,M=250010,B=(1e[M];inline vo... 阅读全文
摘要:
$|x_1-x_2|+|y_1-y_2|=\max(|(x_1+y_1)-(x_2+y_2)|,|(x_1-y_1)-(x_2-y_2)|)$将坐标$(x,y)$逆变换为$(\frac{x+y}{2},\frac{x-y}{2})$后,询问[l,r]的最优解为中位数离散化后用主席树支持查询#incl... 阅读全文
摘要:
首先询问i相当于询问a[j]>=a[i],b[j]>=b[i]的j如果b[j]==b[i],那么a[j]>a[i],这种情况先用set处理掉如果b[j]>b[i],那么a[j]>=a[i],离散化后CDQ分治,用树状数组记录前缀最大值即可时间复杂度$O(n\log^2n)$#include#incl... 阅读全文
摘要:
$f[n]\bmod q=p^{Fib[n]}\bmod q=p^{Fib[n]\bmod\varphi(q)}\bmod q$首先线性筛预处理出所有素数,然后对于每次询问,求出$\varphi(q)$,再用矩阵快速幂求出Fib[n],最后用快速幂求答案即可。#includetypedef long... 阅读全文
摘要:
二分答案$x$表示最大的一段的和。 设$f[i]$表示前$i$个最多分几段,满足最大的一段不超过$x$,若$f[n]\geq k$,则可行, 则$f[i]=\max(f[j])+1,sum[i]-sum[j]\leq x$。 用Treap优化DP,$O(n\log^2n)$。 同理再次二分得到最小的 阅读全文