摘要:
首先想到kd-tree,复杂度主要看剪枝 另一种做法也是分治,先以x排序,然后分治求区间答案(这个答案是小于当前已经得到的答案) 那么可以先对分治排序y,然后找到所有与中心线距离小于当前答案的点 这些点已经以y的顺序排好,所以对于i往后枚举j,当点i和点j的纵坐标距离大于等于当前答案就break 总 阅读全文
摘要:
题表 P3390 【模板】矩阵快速幂 板子 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAXN=110; 4 const int mod=1e9+7; 5 int n; 6 struct Matrix{ 7 int jz 阅读全文
摘要:
适用于一个区间向另一个区间连边,形如: for(int i=1;i<=r1-l1+1;++i) merge(l1+i-1,l2+i-1); 开log个并查集,用表示的区间左端点编号,合并的时候像RMQ一样拆区间,递归即可 每个$2^i$的i最多合并$n-1$次,复杂度$O(n*logn)$ 萌萌哒: 阅读全文
摘要:
4.25考试: 数字 (number) 考试看到数据范围大就猜到和数位dp有关系了,奈何数位dp没怎么学,考场上写了写乱七八糟的东西,调不过样例。 这里有个特殊条件,x∨y的二进制表示中最多只有15个1,所以我们可以O(215)地枚举W=x∧y,逐个判断W是否可行。判断单个 W 是否可行的方式类似 阅读全文
摘要:
Coloring Torus 如果要构造 n = k 的,那么直接 构造一个第 i 行为 i 的就好了。 那么 n<k<=2n 呢? 我们考虑斜着的列。 如果第 i 个斜列放 i ,那么也可以达到 n = k 的目的。 如果第 i 个斜列间隔放两种数,那么仍然可以满足条件。这时候就可以做到 k属于 阅读全文
摘要:
1 int main(){ 2 scanf("%s",rn+1); 3 n=strlen(rn+1); 4 int j=0; 5 for(int i=1;i<=n;++i) 6 S[++j]='#',S[++j]=rn[i]; 7 S[++j]='#'; 8 S[0]='#',S[j+1]='#'; 阅读全文
摘要:
一般形式是$y=k*x+z$,找到合适的$z$,于是维护一个凸包的点集。 一般不判斜率,而算叉积。 套路,斜率单调性或点集单峰性,数据结构瞎套一套就好了。 叉积如果暴long long,开long double 刷题表: A. 陶陶的难题II: 要学一个东西叫01分数规划。 二分答案$ans\leq 阅读全文