随笔分类 -  BZOJ

摘要:倍增floyd 因为答案具有单调性,若所有点数为 $n$ 的环没有出现负环,那么 $n 1$ 的环也不会出现负环,那么我们就找出点数最大的非负环,只要再加一个点就能组成负环了。 预处理出 $f[k][i][j]$ 表示 $i \to j$ 恰好走了 $2^k$ 条边的最短路,那么 $f[k][i][ 阅读全文
posted @ 2020-02-08 12:02 Mrzdtz220 阅读(138) 评论(0) 推荐(0)
摘要:$f[i][k]$ 表示前 $i$ 个分成 $k$ 段,且最后一段以 $i$ 结尾的最小值 容易写出转移方程 $f[i][k] = \min \{f[j][k - 1] + calc(j+1,i)\}$ 因为具有决策单调性(打表 or 证明(不会)),就可以一种分治算法来优化 具体实现就是 $sol 阅读全文
posted @ 2020-02-04 21:48 Mrzdtz220 阅读(128) 评论(0) 推荐(0)
摘要:这道题的难处就在于快速对两个“数”进行比较,若能快速对两个“数”进行比较,查询操作用线段树维护即可。陈立杰13年论文《重量平衡树和后缀平衡树在信息学奥赛中的应用》提到了一种用重量平衡树维护一个序列的方法。平衡树上每个节点代表一个实数区间,若一个节点代表的区间为 $(l,r)$, 则其左儿子所代表的区 阅读全文
posted @ 2020-02-04 11:37 Mrzdtz220 阅读(139) 评论(0) 推荐(0)
摘要:因为 $n$ 比较小,所以可以对每一个 $n$ 求一遍 $\sum \limits_{i=1}^m \varphi(ni)$,然后加起来。 $S(n,m)=\sum\limits_{i=1}^m\varphi(ni)$,那么答案就是 $\sum\limits_{i=1}^n S(i,m)$ 首先看 阅读全文
posted @ 2020-02-03 16:03 Mrzdtz220 阅读(93) 评论(0) 推荐(0)
摘要:求 $$\sum_{i=1}^n\sum_{j=1}^md(ij)$$$$d(ij)=\sum_{x|i}\sum_{y|j}[(x,y)=1]=\sum_{x|i}\sum_{y|j}\sum_{p|(x,y)}\mu(p)$$$$=\sum_p \mu(p)\sum_{x|i}[d|x]\sum 阅读全文
posted @ 2020-02-02 23:48 Mrzdtz220 阅读(130) 评论(0) 推荐(0)
摘要:首先,一个分数 $\frac{p}{q}$ 在 $k$ 进制下是纯循环小数,就是 $\exists t$,$p \equiv p \times k^t \pmod q$,其中 $p \bot q$,那么即为 $k^t \equiv 1 \pmod q$,要存在解,就得 $k \bot q$。所以答案 阅读全文
posted @ 2020-02-02 18:59 Mrzdtz220 阅读(103) 评论(0) 推荐(0)
摘要:$$\prod_{i=1}^{n}\prod_{j=1}^{m}f(\gcd(i,j))$$$$=\prod_{d=1}^{\min\{n,m\}}f(d)^{\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\r 阅读全文
posted @ 2020-02-02 11:59 Mrzdtz220 阅读(90) 评论(0) 推荐(0)
摘要:求 $$\sum_{i=1}^n\sum_{j=1}^md(ij)$$$$d(ij)=\sum_{x|i}\sum_{y|j}[(x,y)=1]=\sum_{x|i}\sum_{y|j}\sum_{p|(x,y)}\mu(p)$$$$=\sum_p \mu(p)\sum_{x|i}[d|x]\sum 阅读全文
posted @ 2020-02-02 11:57 Mrzdtz220 阅读(133) 评论(0) 推荐(0)
摘要:$$\sum_{i=1}^{n}\sum_{j=1}^{m}\sigma_{1}(\gcd(i, j))[\sigma_1(\gcd(i,j))\leq a]$$首先忽略 $\sigma_1(\gcd(i,j))\leq a$ 的限制即求$$\sum_{i=1}^{n}\sum_{j=1}^{m}\ 阅读全文
posted @ 2020-02-02 11:53 Mrzdtz220 阅读(119) 评论(0) 推荐(0)
摘要:$$\sum_{i=1}^{n}\sum_{i=1}^{m}\left[\left(i,j\right)\in P\right]$$$$=\sum_{p\in P}\sum_{i=1}^{n}\sum_{i=1}^{m}\left[\left(i,j\right)=p\right]$$$$=\sum 阅读全文
posted @ 2020-02-02 11:48 Mrzdtz220 阅读(106) 评论(0) 推荐(0)
摘要:询问拆成四个,就像矩阵数点一样。每一个询问的形式为 $\sum_{i=1}^n\sum_{j=1}^m[(i,j)==k]$。$$\sum_{i=1}^n\sum_{j=1}^m[(i,j)==k]=\sum_{i=1}^{\lfloor \frac{n}{k} \rfloor}\sum_{j=1} 阅读全文
posted @ 2020-02-02 11:46 Mrzdtz220 阅读(131) 评论(0) 推荐(0)
摘要:2154 $$\sum_{i = 1}^n \sum_{j= 1}^m lcm(i, j)=\sum_{i=1}^n\sum_{j=1}^m \dfrac{i*j}{(i,j)}$$$$=\sum_{i=1}^n\sum_{j=1}^m \sum_d \dfrac{ij}{d}[(\frac{i}{ 阅读全文
posted @ 2020-02-02 11:44 Mrzdtz220 阅读(108) 评论(0) 推荐(0)
摘要:KD-tree 板子题。 #include <bits/stdc++.h> namespace IO { char buf[1 << 21], *p1 = buf, *p2 = buf; void read() {} inline int getc() { return p1 == p2 && (p 阅读全文
posted @ 2020-01-31 16:01 Mrzdtz220 阅读(105) 评论(0) 推荐(0)
摘要:先给每个两个点之间加一个空,这样直接枚举每个点当中心,就不用讨论正方形的长度是奇数还是偶数了。 枚举每个点当中心,二分正方形多长,$O(1)$ check 用二维哈希做即可。 #include <bits/stdc++.h> namespace IO { char buf[1 << 21], buf 阅读全文
posted @ 2020-01-28 16:26 Mrzdtz220 阅读(175) 评论(0) 推荐(0)
摘要:用dp来解决博弈问题这是第一次做,之前遇到一个博弈dp的题还没补。。设 $L_{i,j},R_{i,j}$ 分别表示在区间 $[i,j]$ 左右放上多少石子能让先手必败。首先这个 $L,R$ 肯定是唯一的,假设不唯一,即存在 $L_1,L_2$ 加在当前区间左端能使先手必败,设 $L_1>L_2$, 阅读全文
posted @ 2020-01-27 22:58 Mrzdtz220 阅读(159) 评论(0) 推荐(0)
摘要:网络流,源点向狼连容量为 $4$ 的边,羊向汇点连容量为 $4$ 的边,然后每个格子都向四周连容量为 $1$ 的边,最小割即为答案。 #include <bits/stdc++.h> const int N = 8e4 + 7; struct E { int v, ne, f; } e[N]; in 阅读全文
posted @ 2020-01-27 22:16 Mrzdtz220 阅读(138) 评论(0) 推荐(0)
摘要:题目老是没说清楚哇。。 把正面设为0,反面设为1,那么下一次得到的硬币就是左右两个硬币的异或和。 这种多次相邻进行异或的,大概就有个规律,多消几次能有规律。 模拟一下就发现,进行 $2^k$ 次操作之后,第 $i$ 个位置就是原序列 $i-2^k$ 和 $i+2^k$ 位置的异或和。 那么就对 $T 阅读全文
posted @ 2020-01-27 22:14 Mrzdtz220 阅读(133) 评论(0) 推荐(0)
摘要:$dp_i$ 表示在 $i$ 处建一个仓库之后的最小花费。转移方程为 $dp_i = \min \{dp_j + \sum \limits_{k=j+1}^{i-1}p_k\times(x_i-x_k)+c_i\}=\min \{dp_j + x_i\sum \limits_{k=j+1}^{i-1 阅读全文
posted @ 2020-01-27 18:01 Mrzdtz220 阅读(127) 评论(0) 推荐(0)
摘要:首先,不知道为什么用了 long double 之后在wsl和cmd跑出来的结果不一样。。看了老半天老是发现不了错。 把圆心平移到坐标原点方便后面计算。 预处理出每个粒子的轨迹,当前位置为 $p$,速度为 $v$,设碰撞点为 $q$,$q=p+tv$,可以得到方程 $(p_x + t v_x)^2 阅读全文
posted @ 2020-01-27 16:07 Mrzdtz220 阅读(178) 评论(0) 推荐(0)
摘要:如果这张图是个DAG,那么最长链就是第一个答案,所以就先tarjan缩点。 第二部分拓扑排序解决,注意重边会影响答案,所以不要重复转移。 #include <bits/stdc++.h> namespace IO { char buf[1 << 21], *p1 = buf, *p2 = buf; 阅读全文
posted @ 2020-01-26 16:40 Mrzdtz220 阅读(134) 评论(0) 推荐(0)