洛谷
文章平均质量分 53
qq_38232157
这个作者很懒,什么都没留下…
展开
-
洛谷 P2023 [AHOI2009] 维护序列(线段树)
线段树延迟标记原创 2022-11-02 17:12:30 · 207 阅读 · 0 评论 -
洛谷 P3385 【模板】负环(spfa 算法判读负环)
spfa 算法判读负环原创 2022-10-31 21:50:13 · 159 阅读 · 0 评论 -
洛谷 P1168 中位数(权值线段树,离散化)
权值线段树,离散化原创 2022-10-29 23:55:12 · 153 阅读 · 0 评论 -
洛谷 P5410 【模板】扩展 KMP(Z 函数)
扩展 KMP模板原创 2022-10-25 20:42:55 · 344 阅读 · 0 评论 -
洛谷 P3375 【模板】KMP字符串匹配
【模板】KMP字符串匹配原创 2022-10-25 16:38:56 · 109 阅读 · 0 评论 -
洛谷 P1020 [NOIP1999 普及组] 导弹拦截(最长上升子序列,贪心,二分查找)
最长上升子序列,贪心,二分查找原创 2022-10-24 19:08:20 · 322 阅读 · 0 评论 -
洛谷 P2350 [HAOI2012]外星人(素因子分解,欧拉函数)
素因子分解,欧拉函数原创 2022-10-21 23:24:32 · 266 阅读 · 0 评论 -
洛谷 P4345 [SHOI2015]超能粒子炮·改(卢卡斯定理)
卢卡斯定理,递推公式原创 2022-10-20 23:06:46 · 117 阅读 · 0 评论 -
洛谷 P3807 【模板】卢卡斯定理/Lucas 定理
卢卡斯定理, 逆元,费马小定理原创 2022-10-20 19:24:36 · 215 阅读 · 0 评论 -
洛谷 P1306 斐波那契公约数 (矩阵快速幂, 辗转相除法)
矩阵快速幂, 辗转相除法原创 2022-10-20 15:21:03 · 208 阅读 · 0 评论 -
洛谷 P1349 广义斐波那契数列(矩阵快速幂, 水题)
矩阵乘法, 矩阵快速幂原创 2022-10-20 14:59:15 · 227 阅读 · 0 评论 -
洛谷 P1962 斐波那契数列(矩阵快速幂, 水题)
矩阵乘法, 矩阵快速幂原创 2022-10-20 14:45:10 · 180 阅读 · 0 评论 -
洛谷 P3390 【模板】矩阵快速幂
矩阵快速幂原创 2022-10-20 13:28:05 · 296 阅读 · 0 评论 -
洛谷 P2158 [SDOI2008] 仪仗队(欧拉函数,水题)
1、数据范围原创 2022-10-14 12:59:25 · 426 阅读 · 0 评论 -
洛谷 P1390 公约数的和(欧拉函数)
1、 数据范围原创 2022-10-14 11:58:11 · 471 阅读 · 0 评论 -
洛谷 P1865 A % B Problem(素数筛法,前缀和,水题)
洛谷 P1865 A % B Problem(素数筛法,前缀和,水题)1、 数据范围很小原创 2022-10-14 11:19:15 · 200 阅读 · 0 评论 -
洛谷 P1835 素数密度(素数筛法)
1、先打印素数表 ,范围是 sqrt(2147443647), 这里大概取值 47000。 为了避免 int 的溢出,所有数据用 long long2、用素数扫描区间 [L, R], 每一素数满足 L原创 2022-10-14 10:25:14 · 508 阅读 · 0 评论 -
洛谷 P1621 集合(并查集,素数筛法)
并查集,素数筛法原创 2022-10-14 09:31:44 · 198 阅读 · 0 评论 -
洛谷 P2092 数字游戏 素因子分解
素因子分解原创 2022-10-13 18:52:05 · 533 阅读 · 0 评论 -
P2398 GCD SUM 欧拉函数
筛法素数, 欧拉函数原创 2022-10-13 14:50:33 · 218 阅读 · 0 评论 -
洛谷 P3662 Why Did the Cow Cross the Road II S 前缀和
简单的前缀和灯能亮,用1表示,灯不亮,用0表示。 a[x] 表示第x盏灯能否亮, c 数组是 a数组的前缀和然后暴力遍历,长度为 k 的灯的总和 s(k), 题目所求就是 min{k - s(k)}原创 2022-08-28 15:43:41 · 107 阅读 · 0 评论 -
洛谷 P1106 删数问题
一本通原创 2022-08-28 11:49:09 · 236 阅读 · 0 评论 -
洛谷 P1854 花店橱窗布置(算法竞赛进阶指南,线性DP)
算法竞赛进阶指南347页,线性DP题目:每一排选一个数,求一个最大的和,要求前一排选的数比后一排选的数靠左。本题要点:1、状态表示:dp[i][j] 表示前 i朵花,放入前j个花盆中,获得最大值。vis[i][j] = true, 如果 dp[i - 1][j - 1] + mp[i][j] > dp[i][j - 1]2、状态转移dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1] + mp[i][j]);3、输出方案:每一行从右往左找,找到原创 2020-10-12 16:16:17 · 241 阅读 · 0 评论 -
P3373 【模板】线段树 2(线段树,延迟标记)
线段树,延迟标记本题要点:1、同时对某个区间 [L, R] 的每个元素,加上 d, 乘上d。定义结构体时候,加上 add, mul 标记。 struct segTree { int l, r; long long sum; long long add, mul; //区间的加标记,乘标记 }2、细节实现:子树的sum、mulv、addv值分别乘上当前节点的mulv值;当前节点的mulv值还原,即置为1;子树的addv值加上当前节点的addv值;子树的sum值加上(子树包含原创 2020-09-27 17:56:46 · 94 阅读 · 0 评论 -
洛谷 P3372 【模板】线段树 1(延迟标记)
线段树,延迟标记本题要点:1、延迟标记:当前的修改或者查询的区间范围是[l, r], 如果某个节点的区间 p 被 [l, r] 所覆盖(l <= tree[p].l && tree[p].r <= r),并且这个节点p ,在后续再也没有访问到,这个节点的子节点的相关信息可以不修改。 如果 p节点后续访问到了,只有在访问到的时候,先更新 p 节点的所有子节点信息。 至于延迟标记,可以在 节点的结构体中,增加 add 标记。查询到某节点 p, 根据 add 标记, 先原创 2020-09-23 17:26:04 · 180 阅读 · 0 评论 -
洛谷 P5091 【模板】扩展欧拉定理
扩展欧拉定理本题要点:1、m <= 10^8, 先求出m的欧拉函数 phm. 先求出 m的素因子 p1 ~ pkphm = m * (p1 - 1) / p1 * (p2 - 1) / p2 * … * (pk - 1) / pk2、b 是一个大数, 不过这里需要关注的是 b % phm 的值。所以,可以一个数字一个数字的读累加到一定数量,对 phm求模。3、扩展欧拉定理:a^b(mod m) = a^(b % phm + phm), 如果 b < phm这里涉及快速幂, 用lo原创 2020-09-22 21:47:13 · 202 阅读 · 1 评论 -
洛谷 P4549 【模板】裴蜀定理
裴(pei)蜀定理引理:对于给定的正整数a,b,方程ax+by=c有解的充要条件为c是gcd(a,b)的整数倍裴(pei)蜀定理:方程ax+by+cz+…+nm=f(其中a,b,c…n,f为整数)有解的充要条件是f为gcd(a,b,c,…,n)的整数倍定理的应用:给定一个序列{an},求一个整数序列{bn}使得a1b1+a2b2+…+an*bn值最小(要求最小值为正数),求这个最小值解:根据裴蜀定理的推广,原式最小值即为gcd(a1,a2…an)#include <cstdio>原创 2020-09-22 16:27:12 · 153 阅读 · 0 评论 -
洛谷 P1516 青蛙的约会(扩展欧几里得)
扩展欧几里得两个青蛙跑步,跑的快的,追上跑得慢的。 并且多跑的路程有 L 的整数倍。本题要点:1、假设 A 青蛙 起点 m, 速度为 a, B 青蛙 起点 n, 速度为 b; 如果 a > b, 跑了 x 步,ax + m - (bx + n) = L * y, 化简为:(a - b) * x + L * (-y) = n - m;这里的 n - m 可能是负数,通过模 L , 使得 方程 右边是正整数。从而得到方程: ax + by = c,(a, b, c 都是正整数)2、 如原创 2020-09-22 16:09:17 · 145 阅读 · 0 评论 -
洛谷 P5656 【模板】二元一次不定方程(exgcd)
扩展欧几里得本题要点:1、这里需要解方程 ax + by = c 的所有正整数解。不过,有个前提,a, b, c 都是正整数, 后面方便处理很多。2、记 d = gcd(a, b), 如果 c % d != 0, 说明方程无整数解。3、 用 扩展欧几里得 exgcd 算出 ax + by = gcd(a, b) 的 解 x0, y0;那么原方程 ax + by = c 的所有 整数解可以表示为x = (c/d)x0 + k(b/d)y = (c/d)y0 - k(a/d), 其中,k取遍原创 2020-09-22 13:26:20 · 307 阅读 · 0 评论 -
洛谷 P3868 [TJOI2009]猜数字(中国剩余定理, 快速乘法)
中国剩余定理, 快速乘法本题要点:1、 套用 中国剩余定理 模板,但是注意,这里的 乘法会 爆 long long ,因此,用快速乘法来代替。2、 a[i] <= 10^9, 当计算 某数 z 和 a[i] 相乘, 应该是调用 quick_multi(a[i], z, mod),也就是用 a[i] 去依次乘上 z 的 二进制的每一位。(a[i] 数值较大, z的较小)#include <cstdio>#include <cstring>#include <原创 2020-09-22 11:50:52 · 157 阅读 · 1 评论 -
洛谷 P1495 【模板】中国剩余定理(CRT)/曹冲养猪(中国剩余定理)
中国剩余定理概念:设 m[1], m[2], m[3], …, m[[n] 是两两互质的整数。 方程组x = a[1](mod m[1]) // 注意,这里的 '=' 表示同余符号x = a[2](mod m[2])...x = a[n](mod m[n])方程 的解 x = sum{a[i] * (m / m[i]) * t[i]} (1 <= i <= n)其中, m = m[1] * m[2] * … * m[n],t[i] 满足同余式子:(m / m[i]) * t[原创 2020-09-22 00:26:57 · 218 阅读 · 1 评论 -
洛谷 P3865 【模板】ST表(倍增, ST表)
倍增, ST表ST算法, 在 O(n*log(n)) 的时间预处理后,以 O(1) 的时间回答:数列 A 的区间 [l, r] 之间的最大值。本题要点:1、f[i][j] 表示从i开始,2^j 个数范围内,区间最大值2、把长度是 2^j 的区间,分为左右两半, 各长 2^(j-1), 2^j 的区间的最大值,就是两个区间的较大值。f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1])3、查询的时候,寻找到第一个 k, 使得原创 2020-09-21 12:59:31 · 106 阅读 · 0 评论 -
洛谷 P2286 [HNOI2004]宠物收养场 (treap 树)
treap 树本题要点:1、建立两棵 treap 树, 一棵用来存 宠物,一棵树用来存 顾客。 题目给出的所有的顾客值和宠物值都不一样。这样结构体 Treap 只需要 多一个 size 来就来子树的节点总数2、套用 treap 树 的模板,写好 以下函数。 因为是两棵树,需要传参数的引用。int New(int val, Treap* a, int& tot)void update(int p, Treap* a)void Build(Treap* a, int& tot,原创 2020-09-21 12:04:45 · 178 阅读 · 0 评论 -
洛谷 P3379 【模板】最近公共祖先(LCA)( tarjan算法, 模板题)
最近公共祖先LCA, tarjan算法本题要点:1、tarjan算法 是离线算法,把所有的查询读入,最后统一输出。2、数组 vis[k] 表示 k点的访问状态,vis[k] == 0, 表示未访问vis[k] == 1, 表示已经访问, 但是未回溯vis[k] == 2, 表示已经回溯3、 如果 某次查询 (x, y), 此时点x 正处于 vis[x] == 1 的状态,而y处于 vis[y] == 2 的状态,那么 lca(x, y) 就是 y点一直往上走,直达遇到第一个祖先 z, vis原创 2020-09-20 17:22:28 · 184 阅读 · 0 评论 -
洛谷 P2814 家谱(并查集,裸题)
并查集,裸题本题要点:1、 n <= 50000, 把名字离散化为整数,后面就是并查集的操作。压缩路径。#include <cstdio>#include <cstring>#include <iostream>#include <map>#include <string>using namespace std;const int MaxN = 5e4 + 10;int fa[MaxN];map<string, i原创 2020-09-20 14:28:17 · 85 阅读 · 0 评论 -
洛谷 P1456 Monkey King(左偏树)
左偏树本题要点:1、首先,每一个节点里需要加入指向父节点的下标 fa。2、这里的左偏树根节点是最大元素, merge 函数里面,if(tree[x].val < tree[y].val) // 根节点是最大元素,这里是小于号 swap(x, y);3、然后每一查找到 点x所在的左偏树的根节点 fax, fax 的 val 减半, 这时候需要调整 fax 的位置:先合并 fax 的左右孩子 merge(tree[fax].lc, tree[fay].rc) (假设为newtree),原创 2020-09-20 12:45:03 · 101 阅读 · 0 评论 -
洛谷 P3377 【模板】左偏树(左偏树模板, 模板题)
左偏树模板,并查集本题要点:1、题目模拟了左偏树的 合并,删除最小元素的操作。还要查询每一个节点所在的左偏树的根节点,这样需要在结构体 添加每一个节点的父节点下标 fa。 然后在合并 操作时候,维护好 fa 的指向。查询某节点 所在的左偏树的根节点, 类似于并查集的 get 操作,并且需要压缩路径。如果不压缩路径,最后一个测试点TLE.2、删除左偏树的根节点x, 需要把 tree[x].val = -INF, 然后x点的fa 指向其左右孩子合并后的根节点,tree[x].fa = merge(原创 2020-09-20 10:50:57 · 82 阅读 · 0 评论 -
SP10108 BALLOT - Distributing Ballot Boxes(二分查找)
二分查找本题要点:1、二分 投票点的最大投票数量。 L = 1, R = max_b(城市的最大人口数)2、对于每一个 mid, 计算所有城市 满足投票点的最大投票数量 是 mid 的 最少的投票点数量。函数 judge 来计算这个。找到最小的使得 if(judge(mid) <= m) 成立的 mid, 就是答案。#include <cstdio>#include <cstring>#include <iostream>using namespac原创 2020-09-19 21:21:24 · 68 阅读 · 0 评论 -
洛谷 P4053 [JSOI2007]建筑抢修(贪心)
贪心网上老哥的思路:先按从小到大排序,考虑每一个建筑能否在前修好。如果可以,就将当前时间加上。如果不行,就在所有修好的建筑中找到一个最大的,并与当前的作比较,如果当前更小则替换成当前的建筑。用一个堆来维护即可。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <queue>using namespace std;原创 2020-09-19 10:58:36 · 155 阅读 · 0 评论 -
洛谷P1351 联合权值 (深搜)
深搜本题要点:1、首先 n <= 2 * 10^5, 所以时间复杂度就是 O(n), 最多是 O(n * logn)。此时,用 链式前向星来存图。2、假设当前节点是 x,父节点是 fa, x 有若干个 孩子节点 y1, y2, … , yk。那么 ,以x节点为中间节点,并且节点之间的距离的节点对有 (fa, y1), (fa, y2), …, (fa, yk),(y1, fa), (y1, y2), …, (y1, yk) ,…观察到,这些节点之间,都互相组合了一遍,相当于(fa + y原创 2020-09-18 11:24:09 · 113 阅读 · 0 评论