![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm
某六十九岁合法萝莉
有那么多优秀的学长,我也好想成为他们中的一员啊....
展开
-
后缀自动机板子(最长公共字符串)
记录一道后缀自动机的板子题,以及自己对后缀自动机的一些理解,表达能力不强故仅写给自己。原创 2022-09-03 19:13:32 · 189 阅读 · 1 评论 -
单调队列优化dp和stl双头队列(deque)的使用
例题:最大子序和题目大意:从长为nnn的序列中找到长度不大于mmm的连续子串,使其序列和最大。解法:该题可使用单调队列优化dpdpdp求解,首先,求出序列的前缀和,然后维护一个长度不大于mmm的双头队列,并且保持其是一个单调递增的队列,每次只需要以当前的前缀和与队头的前缀和相减就可以了,因为子序列和为前缀和S[i]−S[j](j<i,j>=i−m)S[i] - S[j](j<i,j>=i-m)S[i]−S[j](j<i,j>=i−m)因此,我们要保证S[j]S[j]S原创 2022-05-18 22:18:46 · 227 阅读 · 0 评论 -
AcWing1072树的最长路径(树形dp)
题目传送门:树的最长路径题意:求树上相距最长的两点间的距离。思路:由于是无向图,每个点都可以当做是树根,因此,随便选一点作为起点,记录父节点保证向下遍历,获得的最长和次长的离树根的距离便是最长距离。难点:题目有两个较难理解的地方,可以画图来理解① 边权为负数的情况如果离树根为负数,舍弃之,如果所有边权皆为负数,答案为零② 如果最长距离不经过当前根的情况当前根向下遍历,其可以遍历到整棵树,如果该根不经过最大距离,那么肯定是其子树上的某一点,由于为其子树,所以无法再遍历到该点,但正因为该点不为最大原创 2022-04-08 20:40:44 · 283 阅读 · 0 评论 -
组合数的几种求法
文章目录前言一、组合数的定义二、杨辉三角三、Lucas定理四、分解质因数总结前言在很多算法的应用中,组合数常常作为一个重要的组成部分,想要计算出组合数也有许多算法,那么,该如何在合适的地方使用合适的算法呢?一、组合数的定义公式:CabC_a^bCab === a!/(b!)∗(b−a)!a!/(b!)*(b-a)!a!/(b!)∗(b−a)!时间复杂度:O(b)O(b)O(b)说明:一般在aaa较大且bbb较小时使用,代码较为简单易懂,可以搭配逆元使用。代码(逆元为费马小定理):ll C原创 2022-04-04 21:27:48 · 5486 阅读 · 1 评论 -
abc F - Endless Walk
题目传送门:F - Endless Walk题目大意:给出一张图,求从某点开始能无限循环的点的个数。思路:反向思考,找到所有通向死路的点的个数再以所有点的个数减去即可,首先,没有出边的点必定是死路,然后,通向死路且只有通向死路一条出边的点也是死路。代码:#include<bits/stdc++.h>using namespace std;const int maxn=200005;vector<int> G[maxn];int n,m;int in[maxn];i原创 2022-03-27 15:10:18 · 614 阅读 · 0 评论 -
abc E - Wrapping Chocolate
题目传送门:E - Wrapping Chocolate题目大意: 有n块给出长和宽的巧克力和m个给出长和宽的盒子,要求能把巧克力都装进盒子里。思路:长和宽二维合起来考虑的话将会非常困难,所以应将盒子和巧克力的数组合起来对一个元素作为主键排序,然后从最大开始,每次遇到盒子的数组就把非主键元素放入集合,遇到巧克力数组就以其非主键元素在集合内查找,找到最小的且不小于当前元素的值并删除,找不到就代表没有符合条件的盒子。代码:#include<iostream>#include<set&原创 2022-03-27 13:28:33 · 306 阅读 · 0 评论 -
abc D - Polynomial division
传送门:D - Polynomial division题目大意:给出A(x)和C(x)多项式的序数,A(x)*B(x) = C(x),求B(x)。坑:这题不能够顺着想,那样会很复杂,但是一旦把数组倒过来,先求B(m),题意就会明朗很多了。#include <bits/stdc++.h>using namespace std;int main() { int N, M; cin >> N >> M; vector<int> A(N + 1), C原创 2022-03-26 21:58:07 · 348 阅读 · 0 评论 -
牛客寒假训练4--A.R
题目传送门:A.R题目描述:小红拿到了一个长度为 n 的字符串,该字符串仅由大写字母组成。小红很喜欢红色(用’R’字母表示),但她非常讨厌紫色(用’P’字母表示)。她想取一个连续子串,该子串包含至少 k 个’R’字符,且不能包含’P’字符。你能告诉她有多少合法的方案可以取到吗?注:只要连续子串的起始位置或终止位置不同,我们就认为是两个不同的方案。输入描述:第一行输入两个正整数 n 和 k ,用空格隔开。输入一行字符串,该字符串保证仅包含大写字母(‘A’到’Z’)。数据范围:1≤n≤20原创 2022-02-21 15:08:38 · 1851 阅读 · 0 评论 -
牛客寒假集训营 H--小沙的数数
题目传送门:H–小沙的数数题目大意:有一个a数组,我们已知他的长度为nnn,a[+]a[+]a[+]的和为mmm,请问如果我们想要a[⊕]a[⊕]a[⊕]的值最大,数组a在满足a[+]=ma[+]=ma[+]=m时有多少种情况。a[+]a[+]a[+]为a[1]+a[2]+....+a[n]a[1]+a[2]+....+a[n]a[1]+a[2]+....+a[n]a[⊕]a[⊕]a[⊕]为a[1]⊕a[2]⊕....⊕a[n]a[1]⊕a[2]⊕....⊕a[n]a[1]⊕a[2]⊕....⊕a[原创 2022-01-28 07:24:56 · 785 阅读 · 0 评论 -
AtCoder ABC232 C - Graph Isomorphism
纪念一次蠢到爆的abcabcabc,题目传送门可能太久没打了吧,总之就是非常蠢,c题求的是图的同构,刚开始就觉得只是个npnpnp问题但是复杂度很低,用暴力一定能出来,但是一时间就想不到怎么暴力,就用最容易想到的方法,把图的入度对应,结果只有一个测试点wawawa,想着随机数一下运气好就过了,结果abcabcabc半分钟只能提交一次,我傻傻的在那提交了两页还是没过,由于思维惰性也没去想暴力的事,最后计算了一下随机化过的概率微乎其微,蠢到家了。其实这题一个全排列能做的事,也太久没用就没去想,应以为戒,比赛还原创 2021-12-19 22:02:46 · 495 阅读 · 1 评论 -
山东省赛 M.Matrix Problem思路笔记
题目传送门题目大意题目大意题目大意: 给出一个由01序列构成的矩阵(该矩阵的外层一定为0),要求得出两个矩阵,这两个矩阵的&与运算与原矩阵相同,且这两个矩阵满足存在于矩阵中的1都是相连在一起的,斜方向相连不算。初步思路初步思路初步思路: 由性质得,除了原矩阵的1以外,一个矩阵取反就能得到另一个矩阵,因此我们只要需要求其中一个矩阵就足够了,且原矩阵的1必须四面与两个矩阵都有相连。突破口突破口突破口: 题目给出了一个看似没有必要的条件,即原矩阵是被0所包裹的,这点应该就是解题的关键。模型化思路模原创 2021-12-03 22:28:04 · 259 阅读 · 0 评论 -
ac自动机详解(用失配指针实现多模字符串匹配)
ac自动机,是用于计算多个字符串匹配的算法,我们知道,KMPKMPKMP以一种及其巧妙的方式实现了以单模字符串的匹配(以单个字符串去询问其他字符串中是否出现该字符串),现在我们要实现多模的字符串匹配(即以多个字符串去询问其他字符串中是否出现了这些字符串),用KMPKMPKMP显然是不足够的,那么就需要一种新的算法继承了KMPKMPKMP的思想,还要建立在一个数据结构上,它便是trietrietrie字典树。字典树是将字符串分解为单个字符并存在树上的一种数据结构,例如,我们有{“ab”,“ac”,“ba”原创 2021-11-20 23:12:23 · 619 阅读 · 0 评论 -
关于贪心排序问题证明的思路启发
考虑这样一个问题:有n头牛,每头牛有重量wiw_iwi和承重能力pip_ipi这两个属性,现在要把这几头牛一头一头堆叠在一起,引入PDViPDV_iPDVi(危险系数)=∑k=0i−1\sum_{k=0}^{i-1}∑k=0i−1wkw_kwk - pip_ipi,现要求对这几头牛的位置进行排序,使得其中危险系数最大的牛的危险系数为最小。这显然是一道简单的贪心排序问题,影响牛次序的无非就只有两个因素,wiw_iwi和pip_ipi,通过直感我们可以得到是wiw_iwi+pip_ipi原创 2021-10-27 16:20:44 · 137 阅读 · 0 评论 -
2021牛客国庆派对1--J Different Integers(莫队算法)
题目传送门#include <bits/stdc++.h>using namespace std;typedef long long ll;const int m = 1e5+10;int a[m];int cnt[m];int ans=0;int arr[m];int block;struct node{ int l,r,id;}query[m];bool cmp(node a,node b){ return a.l/block==b.l/block?a.r/bl原创 2021-10-03 08:20:20 · 62 阅读 · 0 评论 -
atcoder点阵坐标计算两题
点阵和直角坐标系一直都对我造成了较大的困扰,现借atcoder中的两题好好总结下该类题的计算方法。一:点阵求两图形是否全等。题目链接:C-Shapes题目大意:给出两个点阵,求经过旋转和平移后两图像是否全等。方法:分别找到最左最右最上最下的坐标并记录,然后原图从左下遍历至右上,分别标记对照图从四角开始遍历的图形情况,如果有一个角遍历完成后图形与原图吻合则成立。代码:#include<bits/stdc++.h>using namespace std;int const N = 2原创 2021-09-27 23:05:31 · 216 阅读 · 0 评论 -
混合背包二进制优化(伪万能背包模板)
今天在准备背包问题的算法模板时,突然想到上学期遗留下的一道混合背包问题,当时刚接触c语言,遇到这种题自然是一筹莫展,写的背包不是超时就是超空间,也有写过二进制的优化,但都以失败告终,如今看来,此题便是不攻自破了,顺便把它写成了万能的背包模板。题目如下:该题因为数据量较大,要用到优化来解决超时的问题,我选择了二进制优化,把混合背包转化成0-1背包问题。二进制优化的原理十分简单,就是通过二进制拼出自然数的方法将一个多重背包拆成几个0-1背包,例如,7可以拆成1,2,4三个数,这三个数能拼出1-7的所有数原创 2021-06-15 17:42:03 · 263 阅读 · 1 评论 -
2021-06-14 atcoder解题报告D - aab aba baa(组合数与字典序)
又是atcoder的D题,感觉atcoder每次从D题开始都是没有学过的…那样也好,每次都能学到新的内容,又能变强那么一点点…题目传送门:D - aab aba baa该题大意是求出a,b的第k个字典序序列,刚开始想到了二进制枚举啥的,但是看到数据量…虽然不大,但是肯定是没法这么做的。然后呢,就大致想到组合数的方面但不知道怎么实现,读了atcoder的提交代码后了解了思路。大致就是按位放a和b,首先应先考虑放a的情况,不会改变后面的字典序,求出该位放a时后面的组合数,如果k小于等于该组合数的话呢,就原创 2021-06-14 23:39:40 · 258 阅读 · 0 评论 -
2021-06-10atcoder解题报告D - Kth Excluded(差分+二分法)
题目传送门:D-Kth Excluded初看该题,我天真的以为要用到stl的set或list,自我否认之后想到了用缺数二叉搜索拼出该数的方法,苦于没有合适的解法,经学长点拨后才知道原来还有差分数列这种东西,实在是太丢人了呜呜呜呜。差分在该题的应用就是对应原数列的前面所缺的总数,再通过以前一个被移除数定位所查找的数。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>原创 2021-06-13 23:03:21 · 300 阅读 · 0 评论 -
链式前向星和优先队列实现有向图/无向图的最短路)
链式前向星和优先队列实现有向图/无向图的最短路(解题日志)先看例题:poj3268银牛节题目大意:各个农场派一只奶牛去指定农场参加银牛节,计算在选择最优路径时耗费最多时间。题目解析:由于m为10^5本题用普通的邻接列表必然超时,因此学习新的方法链式前向星,相比较前向星而言时间复杂度仅为O(m)。算法解析:该算法是将起点相同的路径归为一类,然后每个路径节点的next指向上一节点,第一个节点则指向-1。样例实现最终图示(以x为起点):诶嘿(*・ω< ) 。添加路径代码:void add(原创 2021-05-20 19:54:54 · 386 阅读 · 0 评论 -
最小生成树两种常用算法
最小生成树的简易实现一:Kruskal 算法①算法核心思想:Kruskal是实现最小生成树比较简单的一种算法。该算法主要是应用了并查集的思想,先对图各边进行按权值从小到大排序,再孤立各个点,然后按序遍历各边将在集合外的点并到集合里,形成一个最小生成树复杂度最少为O(nlogn)。②例题P2504聪明的猴子AC代码:#include<bits/stdc++.h>using namespace std;struct node{ int x,y; int len;}w[10000原创 2021-05-11 18:48:30 · 2912 阅读 · 0 评论 -
最长不下降子序列(复杂度较低的方法)
最长不下降子序列随笔参考文章最长不下降子序列nlogn算法详解最长不下降子序列是动态规划的基础题,通常我们会这样去解它int a[MAXN], d[MAXN];int dp() { d[1] = 1; int ans = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j < i; j++) if (a[j] <= a[i]) { d[i] = max(d[i], d[j] + 1)原创 2021-04-28 15:47:32 · 345 阅读 · 0 评论 -
欧拉图的简易实现
欧拉图的简易实现今天学习了欧拉图相关知识,感觉网路上的教程都过于繁琐(最后还是自己看源码弄懂的),在此谈谈自己对欧拉图的理解。①欧拉图的作用:欧拉图是为了解决经过图的各个连接图的线路问题,例如经过各点的连线方案(ps:实际上就是经过各点画一条线,线不能重叠),至于欧拉回路和欧拉通路的区别,在此不多赘述,反正实现起来都一样。②欧拉图的实现:实现欧拉图首先应该找一个有奇数连线的点(就是进去后无法出来的点)作为起点,如果点有两个以上,就表示没有能够实现欧拉回路的方案(划线必定重叠),如果没有也没有关系,原创 2021-04-27 18:36:42 · 1106 阅读 · 0 评论