自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(134)
  • 收藏
  • 关注

原创 python学习笔记

python知识点总结

2023-03-02 23:30:30 284

原创 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)RC-u4 攻略分队

本题思路较为清晰,枚举每种组合,然后按一定规则排序即可

2022-07-12 11:07:03 473

原创 Color(二分图匹配)

Link思路:结论一:颜色数为度最大的那个点的度(m);然后m次找最大匹配(每一次找完都要删边,防止下一次重复找到),每一次将找到的最大匹配中边染成一种颜色,但每一次都应该先从度数最大的点开始找,不然就有可能,让最大的度数不能减少。#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 1, M = 2e3 + 1;int n, m;int cnt, e[M<<2], ne[M<<2

2021-12-28 21:08:39 281

原创 MMSet2

Link思路:前置知识 lca树的的直径求法:最深的一个点一定是直径的一端直径的中点到树上最远的距离最小。#include <bits/stdc++.h>using namespace std;const int N = 3e5 + 10;int d[N], fa[N][21];int n;`int e[N<<2], ne[N<<2], h[N], cnt, p[N*10];void add(int x, int y){ e[cnt]

2021-12-27 19:36:36 195

原创 卷网之王(cuit第八届校赛)

LinK#include <bits/stdc++.h>using namespace std;#define ll long longconst ll N = 2e5 + 10;double dp[1000001];int main(){ int t; cin >> t; while(t --) { int n, k; cin >> k >> n; for(in

2021-12-20 09:59:36 231

原创 最长公共上升子序列

link#include <bits/stdc++.h>using namespace std;const int N = 3e3 + 10;int a[N], b[N];int dp[N][N]; // 以b[j]结尾的a[1] ~ a[i], b[1] ~ b[j], 的最长上升子序列int main(){ int n; cin >> n; int ans = 0; for(int i = 1; i <= n; i ++) cin >&g

2021-10-06 11:36:50 78

转载 Rarity and New Dress CodeForces - 1393D(思维加dp)

Link题意:给定一个n∗mn ∗ mn∗m 的字符矩阵,判断有多少个相同字符斜正方形。解题思路:我们首先不管别的,对于每一个字符,它都能组成只有一个相同字符的斜正方形。那么其余的就是多种相同字符组合在一起形成的斜正方形了,怎么组合呢?我们不难发现。仔细看这张图,在第一个图形中,若要构成这样的斜正方形,那么最下面的那个点一定要可以往上延伸。即判断当前位置[i][j]与上面四个位置([i−1][j]、[i−1][j−1]、[i−1][j+1]、[i−2][j])([i-1][j]、[i-1][j-1]、

2021-05-12 22:20:10 124

原创 Mike and Friends(后缀数组 + 线段树)

题意:给你n个字符串,和x, y, k, 问你从第x个字符串到第y个字符串中一共有多少个这些字符串的子串和第k个字符串相等。思路:参考题解, 也可以等价转换为求和第k个字符串相等的子串有多少,根据后缀数组定义我们可以在我们可以求所有和s[k]相等的子串的数量,定义母串为所有字符串拼起的字符串(因为sa[i]是按照字典序排序的结果, 我们只需以s[k]母串中的位置为中心P,分别求出LCP(L,P)==len(s[k]),LCP(P,R)==len(s[k])LCP(L, P) == len(s[k]), L

2021-05-10 21:21:56 173

原创 Sightseeing HDU - 1688(最短路 + 次最短路)

题意:给你一个有向带权图, 让你求出最短路条数, 如果次最短路的距离 = 最短路 + 1, 那么结果再加上次最短路的条数板子题:#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int inf = 0x3f3f3f3f;int h[N], e[N<<2], ne[N<<2], f[N<<2], cnt;void add(int u, int v, int w)

2021-05-09 20:37:45 97

原创 第k大数(多种方法)

方法一树状数组 + 二分优点:实现简单,原理简单缺点:只能对整体查询,不能查询区间第k大,而且要求数字不能太大复杂度:查询一次log2(n)log^2(n)log2(n)原理:树状数组中T[i]存储大小为i−lowbit(i)到ii-lowbit(i) 到 ii−lowbit(i)到i的数出现的次数, 查询时二分这个数即可,判断当前数是否为第k大数(直接用当前总数 - 查询得到的比i小的数)#include <iostream>#include <cstdio>#in

2021-05-08 20:15:56 288

转载 Insertion Sort Gym - 101955C(组合数学/打表找规律)

Link题意:给你一个n, k, q, n代表长度为n的数组,数组中是1~n的全排列, k是进行k次插入排序。现在问你1~n的全排列中有多少种排列会在进行k次插入排序后其最长上升子序列长度大于等于n - 1.进行k次插入排序含义:下标1~k的位置排序好了, k + 1 ~ n 未变。排列组合思路:借鉴link代码:#include <bits/stdc++.h>using namespace std;#define int long longconst int N = 1e4

2021-05-07 21:19:40 125

原创 预处理技巧Best ACMer Solves the Hardest Problem(暴力 + 预处理)

我们在二维平面坐标下要求到(x, y)距离为 sqrt(k) 的点, 我们可以预处理设这个点为(x1, y1)那么(x−x1)2+(y−y1)2==k(x - x1)^2 + (y - y1)^2 == k(x−x1)2+(y−y1)2==k令dx=x−x1,dy=y−y1dx = x - x1, dy = y - y1dx=x−x1,dy=y−y1我们只需预处理出所有的dx2+dy2==kdx^2 + dy^2 == kdx2+dy2==k 的dx 和 dy 和 k 的组合在查询时就可以按照k的

2021-05-07 11:01:26 139

原创 Lucky7 HDU - 5768(中国剩余定理 + 容斥定理 + 二进制枚举)

Link题意:给你一个n, x, y, 然后后面n行每行一个质数 p[i], 和一个余数 m[i]让你求满足在 x~y之间满足能被7整除且不能满足任何一个 方程组 num % p[i] == m[i], p[i]是质数。思路:由题意想到要用中国剩余定理, 但题目要求的是 x%p[i] != m[i], 所以利用容斥定理S−A1∪A2∪A3...S−A_1∪A_2∪A_3...S−A1​∪A2​∪A3​...S即为x~y中能被7整除的数A1∪A2∪A3...A_1∪A_2∪A_3...A1​∪A2​

2021-05-06 11:53:32 105

原创 AC(2020昆明站补题)

Link题意: 给你一个长度为n的字符串, 允许你最多修改k个字符,现在问你最多能出现多少个AC字符如:输入9 2arakbacca输出3acacbacca比赛时,一脸懵逼以为是个普通贪心, 然后wa了, 全场也只有两个题, 后来听说是反悔型贪心, 特意去学了学, 然后又去做, 还是吗,没做出来, 看了题解才发现和种树那题套路一样。思路:这个题我们每次修改数字时, 肯定优先选择已经是AC的或者A~ 或者 ~C的因为这样的修改次数最少,且形成的AC最多, 但是当我们k足够大时,

2021-04-23 21:36:27 242

原创 种树 黑暗爆炸 - 2151(反悔型贪心)

DescriptionA城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置。值得注意的是1号和n号也算相邻位置!)。最终市政府给园林部门提供了m棵树苗并要求全部种上,请你帮忙设计种树方案使得美观度总和最大。如果无法将m棵树苗全部种上,给出无解信息。思路

2021-04-21 21:03:04 218

原创 GCD HDU - 1695

LINK题意:求1~n, 和 1 ~ m 中互质的本质不同的数对的数量。设n < m, 则可以转变成求 1 ~ n 与 1 ~ n 的数对 和 1 ~ n 与 n + 1 ~ m 的 数对, 前者直接时欧拉函数的前缀和即可(phi[i] :小于 i 且与 i 互质的数的数量。所以主要要考虑后者,很容易想到1 ~ n 和 j 互质的数 = n - (1 ~ n 与 j 不互质的数), 那怎么求不互质的数呢,可以将j分解为质因数, 显然质因数的倍数和j不互质,比如 2x, 3x, 所以我们

2021-04-20 16:55:08 92

原创 组合数递推

void get_c(){ c[1][0] = c[0][0] = c[1][1] = 1; for(int i = 2; i < N; i++) { c[i][0] = c[i][i] = 1; for(int j = 1; j < i; j ++) { c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod; // cout <

2021-04-19 20:13:31 89

原创 线段树模板(区间修改, 区间求和)

#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>#define N 100005#define ll long long int#define lowbit(i) (i & -i)using namespace std;ll tree[4 * N], lazy[4 * N], a[4 * N];

2021-04-17 17:24:53 161

原创 树状数组(复习)

树状数组)a[N]: 存的数据T[N]: T[i] 为 a[i−lowbit(i)]到a[i]a[i-lowbit(i)] 到 a[i]a[i−lowbit(i)]到a[i]的和c[N]: a[i] - a[i -1]单点修改,区间查询)单点修改j时, 改变了在他后面且i - lowbit[i] < j, 的i点, 故需要修改T[i];for(int i = x; i <= n; i += lowbit(i)) T[i] += y;单点查询直接前缀和即可for(int i

2021-04-17 17:22:18 84

原创 Life Forms POJ - 3294(后缀数祖 + 二分 + 分组)

POJ - 3294题意:给你n个字符串, 让你找到至少在n/2个字符串中出现的最长的公共子串(有多个按字典序全部输出)思路:和前几题类似, 先把各个串连接起来, 用不相同的字符(最好换成数字, 不然容易出bug), 然后求一遍后缀数组即可。然后二分公共子串的长度, 对于二分的每一个值check一下, 在check中按照是否连续的大于mid来分组, 对于每一组内我们只需要判断来自不同的串的数量是否大于n / 2即可细节见于代码#include <iostream>#include &l

2021-04-17 14:59:25 186

原创 Common Substrings (求有多少个长度大于K的公共子串。)

链接POJ - 3415 题意:给出两个字符串s1、s2和一个整数K,求有多少个长度大于K的公共子串。思路:参考题解:现将s = s1 + ‘$’ + s2;(做出后缀数组)有后缀数组height的特性可知可将排名1~n的后缀串通过是否公共子串大于k来分组我们只需求出每一组中的长度大于K的公共子串, 在相加即可得到答案;对于每一组朴素方法:枚举组内的每一个s1中的后缀再枚举在该组中的每一个s2中的后缀, 答案为(height[i] - k + 1) * (height[j] - k +

2021-04-16 19:09:52 195

原创 Maximum repetition substring(重复次数最多的连续重复子串)

后缀数组模板题参考论文先穷举长度 L,然后求长度为 L 的子串最多能连续出现几次。首先连续出现 1 次是肯定可以的,所以这里只考虑至少 2 次的情况。假设在原字符串中连续出 现 2 次,记这个子字符串为 S,那么 S 肯定包括了字符r[0],r[L],r[L∗2],r[L∗3],……r[0], r[L], r[L*2],r[L*3], ……r[0],r[L],r[L∗2],r[L∗3],……中的某相邻的两个。所以只须看字符r[L∗i]和r[L∗(i+1)]r[L*i]和 r[L*(i+1)]r[L∗i

2021-04-14 21:15:43 454

原创 KMP模板

#include <iostream>using namespace std;const int N = 1e5+5, M = 1e6+5;int n, m;char s[N], p[M];int ne[N];int main() { cin >> n >> p + 1 >> m >> s + 1; // 求ne数组过程,其实就是自己匹配自己的过程 for (int i = 2, j = 0;

2021-04-14 16:43:37 56

原创 UVA10298 Power Strings 计算最小循环节多种方法

UVA10298 Power StringsLingk一.后缀数组比较是否有长度为k的最小循环节, 直接找LCP(1, 1 + K)是否等于n - k即可eg ababababab长度为2的最小循环节则LCP(1, 3) == 8;倍增方法偏慢常数过大, 正解为DC3方法倍增能过洛谷上的题2.8秒#include <iostream>#include <cstring>#include <algorithm>#include <cstdio&

2021-04-14 16:42:57 86

原创 第四十五届ICPC昆明站总结

2021-第四十五届ICPC昆明站总结一:组队二:报名三:赛前准备在准备报名之前,我们加入了ICPC昆明的官方群,了解到了相关的报名事宜,之后还会再牛客上开启训练赛,之后我和俩位队员就每周星期天打牛客的训练赛,一开始全英文题大家都有点不习惯,我们就开翻译打,大家用三台电脑通过一个团队账号提交,还记得之前有一道题时最小圆覆盖大家因为理解错了意思还卡住了好久一段时间,之后仔细读了读题发现大家都马虎了,套了个板子就过了,还有些题目又臭又长,有的题大家照着样例猜题意,反而没用太久时间读题就过了。最后一场我们

2021-04-13 16:54:05 993

原创 (Palindrome)各种计算最长回文字串的方法实现及分析

Palindrome URAL - 12971,刚学的后缀数组 时间复杂度O(nlog(n))空间复杂度O(n)eg :计算 “vababa”的最长回文字串先加上特殊字符分割防止这个位置有公共前缀,然后再加上该字符的串逆序。生成 “vababa#vababa” 下标从1开始然后求出后缀数组的sa, heigh数组, 用倍增的方法查询第l个后缀和第r个后缀的最长公共前缀然后遍历1~n, 分奇偶回文串讨论即可奇:vababa#ababav 的公共前缀 即 LCP(i,n−i+1)∗2−1LCP(

2021-04-12 17:08:43 151

原创 迭代器用法

迭代器只能用++或者–, 不能+1或者-1

2021-04-10 18:14:32 199

原创 Musical Theme POJ - 1743(最长不重复字串,二分加后缀数组)

题目大意给出一串数字(每个数字范围1…88),问是否存在两个长度相等的不重叠子串,两串每两个同位数字的差值为定制。长度小于5则输出0,否则输出最大长度。思路: 一个巧妙的处理差分, 差分后每个差分的值,然后直接套后缀数组即可,但后缀数组无法直接求解, 后缀数组的height数组能求排名相邻的两个字符串的公共前缀, 我们不仅需要两个字符串之间的公共前缀大于4,还需要字符串之间的距离大于5, 显然可以按照是否大于5将height分组,答案就在某个组内/*题意给出一串数字(每个数字范围1...88),问

2021-04-10 16:54:41 128

原创 后缀数组模板RMQ

Link#include <bits/stdc++.h>#include <cstring>#include <algorithm>using namespace std;const int N = 1000010;int n, m;char s[N];int sa[N], x[N], y[N], c[N], rk[N], height[N];//sa[i]排名为i的后缀是哪一个void get_sa(){ for(int i = 1; i &

2021-03-31 19:18:52 131

原创 The Closest M Points HDU - 4347(KDT多维,最近的m点, 优先队列)

题意: 给你n个k维的点, 然后q个询问, 对于每个询问会给出一个点,需要我们求出离这个点最近的m个点,按距离从小到大排序。思路: :和二维类似, 但求的是最近的m个点, 就要结合优先队列了,在遇到一个点时,如果优先队列还没有满,就先加入,如果满了, 就和队列头部的元素相比较,看谁最优,在判断是否继续分支的时候也要根据队列的情况,来进一步的判断是否继续向下搜索。补充知识:pait内部自定义了排序优先级, 第一排序的时first, 然后是second具体细节见于代码#include <bits

2021-03-30 16:59:11 137

原创 In case of failure HDU - 2966(kd_tree)

题意: 给n个二维坐标表示n个点,求每一个点到它最近的点的距离思路:kd_tree模板题,看了题解终于会写模板题了大致原理: 是基于BST的,只不过BST是一维的,而KD_tree可以划分多维的情况。但也有一点不同的情况,距离是要考虑多维的,不能简单的通过某一维的划分,就判断出正解,所以我们可以先向最有可能是正解的地方查询,然后回溯判断其他情况,此时由于已经有了一个较优秀的答案就可以减去较多的枝。实现细节见于代码:#include <bits/stdc++.h>using na

2021-03-29 23:52:11 92

原创 How Many to Be Happy?(最小割)

Link题意: 给n个点m,条边所构成的一个无向图, 令f[i]f[i]f[i]为让第i条边变成该图的ms中的一条边需要删除的最少的边。求1到n的f[i]的和1到n 的f[i]的和1到n的f[i]的和参考题解:对于一条边如果要加入u~v要加入MST则在连接u,v两个块中的所有的边中边权最小,所以只需考虑删除比e_uv边权更小的边, 所以考虑用比w_uv小的边建图, 然后求出这个图的最小割即可, 这样就可以把u和v分成两个块。最小割==最大流#include <bits/stdc++.h>

2021-03-28 21:51:59 83

原创 AC自动机+矩阵快速幂2 POJ - 2778

Link题意:有m种DNA序列是致病的,问长为n且不包含致病序列的DNA有多少种参考题解,思路:我们可以先对这m种DNA建立trie树, 然后建立一个图,离散数学中的, 然后快速幂即可,建图是对于相邻两点来建的, 如果a->b且b不为一个治病串的终点那么其就是可以到达的。#include <cstdio>#include <cstring>#include <queue>using namespace std;const int mod = 1

2021-03-19 22:07:27 76

原创 poj1625AC自动机 +dp +大数模板

LINK题意:给你n个字符(ascll码可能为负数), 再给你p个字符串,全由(全是n个字符组成, 不包含别的字符), 在给你一个整数p问你由这个n个字符组成的长度为p且其字串不包含那p个病毒串的字符串有多少个(n个字符可以重复选择)#include <map>#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <ioman

2021-03-19 15:25:11 65

转载 大数模板,刘汝佳支持负数

已重载的运算符,转载支持负数运算符类型 运算符双目运算符 +(加), -(减), *(乘), /(整除), %(取模)关系运算符 ==(等于), !=(不等于), <(小于), >(大于), <=(小于等于), >=(大于等于)逻辑运算符 ||(逻辑或), &&(逻辑与), !(逻辑非)单目运算符 +(正), -(负)自增自减运算符 ++(自增), –(自减)赋值运算符 =, +=, -=, *=, /=, %

2021-03-18 20:07:46 113

原创 极角排序

叉积:如果若OA→=(x1,y1),OB→=(x2,y2)\overrightarrow{OA}=(x1,y1) , \overrightarrow{OB}=(x2,y2)OA=(x1,y1),OB=(x2,y2)定义叉积:OA→×OB→=x1y2−x2y1\overrightarrow{OA}×\overrightarrow{OB}=x1y2−x2y1OA×OB=x1y2−x2y1三角形SOAB=12∗∣OA→∗OB→∣三角形S_{OAB} = \frac{1}{2} * |\overrightar

2021-03-18 19:29:59 161

原创 AC自动机模板(HDU - 2222)

题目描述给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以及一篇长为 m 的文章,问:文中出现了多少个待查询的单词。多组数据。输入格式第一行一个整数 T,表示数据组数;对于每组数据,第一行一个整数 n,接下去 n 行表示 n 个单词,最后一行输入一个字符串,表示文章。输出格式对于每组数据,输出一个数,表示文中出现了多少个待查询的单词。输入样例15shehesayshrheryasherhs输出样例3数据范围对于全部数据,1≤n≤104,1≤m≤

2021-03-16 20:59:10 116

原创 Country Meow Gym - 101981D (最小覆盖球, 爬山法)

#include <bits/stdc++.h>using namespace std;typedef double db;const int N = 1e5+ 10;struct node{ db x, y, z;}q[N];db r = 1e8;int n;double get_dist(node a, node b){ db dx = a.x - b.x, dy = a.y - b.y, dz = a.z - b.z; return dx *

2021-03-12 18:30:32 118

原创 利用差分求非齐次多项式的通项公式

as

2021-03-12 17:12:07 497

原创 Magic Potion(网络流,二分图)

题意:有n个英雄, m个怪兽, k瓶药水, 每个英雄都有一个它可以杀的怪物集合, 但只能杀一个, 但如果喝了药水就可以再杀一个,注意每个怪物只能死一次, 每个英雄只能喝一瓶药水。问英雄们最多杀多少怪物。大概思路:网络流模板题, 只要建出图就可以得到答案,设置虚点pS ~P 流量为 kP~每个英雄 1S~每个英雄 1每个英雄~能杀的怪兽集合1怪兽~终点1重点:不能S~P n + k, 然后 p ~ 每个英雄 2, 因为这样会导致有可能超过k个人发出了大小为2的流量,与题意不和细节见于代码#

2021-03-12 15:49:59 138

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除