摘要:
将所有点投射到二维平面上,枚举形成答案的两个$1$类点作为端点,以及过这两点的两条平行直线,那么答案就是直线边上以及内部的点数。 显然只需要枚举$1$类点形成的凸包上的点。 如果只有一个$1$类点,那么答案是$1$。 如果凸包大小为$1$,那么只有和它重合的$0$类点会被计入答案。 如果凸包大小为$ 阅读全文
摘要:
对于每条河流,要让它排名最靠前,那么显然它必须要延伸到根。 设第$i$条河流到根的距离为$d[i]$,对于每个节点,如果存在一条河流比$d[i]$长,那么让它延伸会使答案最小,否则要选择一条最短的河流来进行延伸。 设$f[i]$表示每个节点往外延伸的河流的长度的最小值,可以通过树形DP求出。 从小到 阅读全文
摘要:
将球员按限制从大到小排序,那么最优解中每支球队都是一个连续的区间。 设$f[i]$表示前$i$大的球员成功组队时,最多能组的队伍数,$g[i]$表示此时最大人数的最小值。 那么$f[i]=\max(f[j]+1),a[j]\geq i-j$,即$a[j]+j\geq i$。 注意到$a[j]+j>j 阅读全文
摘要:
从右往左扫描线,用线段树维护扫描线上每一个点能达到的花的数量,并支持最近篱笆的查询。 对于一朵花,找到它上方最近的篱笆,那么它对这中间的每头牛的贡献都是$1$。 当扫到一个篱笆的右边界时,这中间的答案都要清零。 当扫到一个篱笆的左边界时,这中间的答案同理都要清零,但是要向上直到最近的篱笆为止都加上下 阅读全文
摘要:
从$(0,0)$开始BFS$2\times10^6$步,那么迷宫的形状有三种: 1.走不完$2\times10^6$步,直接判定即可。 2.可以走到$(n,0)$以及$(0,m)$,那么直接把询问点平移到一开始的小迷宫里即可。 3.可以沿着$(dx,dy)$这个向量达到某些左上角,那么先三分沿向量走 阅读全文
摘要:
对于高度相同的一段可以合并,用链表从左往右维护这些连续段,每段维护以下信息: $l,r$:表示区间的左右端点。 $t,a$:表示在第$t$天结束时它的高度是$a$。 $b$:当阳光在左边时它是否会长高。 $c$:当阳光在右边时它是否会长高。 令$sa[i],sb[i]$分别表示前$i$天中阳光在左/ 阅读全文
摘要:
求出前缀和$s[]$,那么区间$[l,r]$的几乎平均数$=\frac{s[r]-s[l-1]}{r-l}$。 若只有一个询问,那么可以维护$(i,s[i-1])$的凸壳,在凸壳上二分点$(i,s[i])$的切线。 对于多个询问,考虑分块,那么只需要暴力处理零碎部分即可。 时间复杂度$O(n\sqr 阅读全文
摘要:
首先枚举$n$的每个约数$d$,检查一下$d+1$是否是质数,这些数都有可能作为答案的质因子出现。 考虑爆搜,每次枚举下一个要在答案中出现的质因子$p$,将$n$除以$p-1$,再枚举$p$的指数,然后递归搜索。 需要加一些剪枝: $1.$当$n=1$的时候说明找到了一组合法解,直接返回。 $2.$ 阅读全文
摘要:
长为$A$,宽为$B$的矩阵放$K$个车的方案数$=C(A,K)\times C(B,K)\times K!$。 建立笛卡尔树,那么左右儿子独立,设$f[i][j]$表示$i$子树内放$j$个车的方案数。 合并左右儿子之后,枚举在底部矩形放几个车进行转移即可。 时间复杂度$O(n^3)$。 阅读全文
摘要:
将位置划分成$O(m)$段区间,每段最早被阻挡的时间可以用堆维护。 那么每段区间对询问的贡献独立,扫描线处理即可。 时间复杂度$O(m\log m)$。 阅读全文
摘要:
若$a\leq 1000$,则整个$f$数列会形成$O(a)$段公差为$a$的等差数列。 否则$a^{-1}\leq 1000$,设$ai+b=f(i)$,那么有$i=a^{-1}f(i)-ba^{-1}$。 交换$i$和$f(i)$的地位,这将形成$O(a^{-1})$段公差为$a^{-1}$的等 阅读全文
摘要:
建立后缀树,用线段树合并求出每个节点子树内部最靠前和最靠后的后缀位置以及相邻后缀距离的最大值,同时求出每个子串能完整匹配的最长后缀的长度。 对于一个子串,如果其长度不小于相邻后缀距离的最大值,且最靠后的位置加上最长匹配的后缀长度不小于$n$,那么就说明可以从中间开始覆盖到尾部。 对串做KMP,求出每 阅读全文
摘要:
与横线以及竖线的交点个数很容易求,那么只要求出横线竖线交点与运动轨迹的交点数即可。 运动轨迹可以划分成若干条贯穿边界的斜线,对于第一条和最后一条,可以用bitset暴力统计。 对于中间的部分,斜线都是完整的,可以FFT预处理。 时间复杂度$O(n\log n+\frac{nq}{32})$。 阅读全文
摘要:
设$f[i][j][k]$表示考虑了前$i$个数字,增加了$j$根火柴,删掉了$k$根火柴是否可能,用bitset加速DP。 然后设$g[i][j]$表示增加了$i$根火柴,删掉了$j$根火柴的最小代价,枚举移动次数进行更新。 决策满足单调性,故可以分治求解。 设$m=14n$,则时间复杂度为$O( 阅读全文
摘要:
对于$a^b$,如果$b=2$,那么在$[\sqrt{n},\sqrt{n}+k\log k]$内必定能找到$k$个质数作为$a$。 筛出$n^{\frac{1}{4}}$内的所有质数,暴力枚举所有落在该区间内的倍数,将其筛掉,即可判断每个数是否是质数。 然后以最大的质数的平方作为上界,枚举更大的$ 阅读全文
摘要:
根据Hall定理,若存在一个区间满足内部需求数$>$内部石子数,则不存在完美匹配。 由于区间互不包含,所以设: $a[i]$表示右端点$\leq i$的区间的容量之和。 $b[i]$表示左端点$\leq i$的区间的容量之和。 $s[i]$表示前$i$个位置的石子数之和。 则区间$[l,r]$的: 阅读全文
摘要:
设$f[i]$表示$i$往上通过一趟公交车能到达的深度最小的祖先,这可以通过将公交车按$lca$深度从小到大排序后用并查集染色得到。 对于每个询问: $1.x==y$ $ans=0$。 $2.x$是$y$的祖先 交换$x,y$,变成$3$。 $3.y$是$x$的祖先: 在$f$上倍增即可。 $4.x 阅读全文
摘要:
设$f[i][j]$表示$a[i]$改成$j$时的最小总代价。 若$a[i]<A(i-1)+1$,则不妨将其强行改成$A(i-1)+1$,如此处理之后$\min(f[n][1..Q])$就是答案。 可以发现,对于固定的$i$来说,$f[i][j]$从左往右形成一个下凸壳。 观察转移,$f[i-1]$ 阅读全文
摘要:
设最大的数为$w$,若$n>k+\log w$,那么显然所有$1$都可以保留,否则现在$n\leq k+\log w$。 如果$w\leq 100000$,那么可以DP,设$f[i][j]$表示考虑前$i$个数,保留的数的$or$是$j$时,最多能删除多少个数,时间复杂度$O(nw)$。 如果$w> 阅读全文
摘要:
考虑从$0$到$n$枚举$A$的通关楼层。 设$f[i]$表示$B$通关$i$层时$C$最多能得到多少金币,因为金币数非负,所以也可以看作最多通关多少层。 当$A$的通关楼层往上多$1$的时候,这把钥匙必须给$A$。 如果这把钥匙还剩$0$把,那么说明: $1.B$某些楼层$j$以上都不能到达,对应 阅读全文