自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 后缀自动机板子(最长公共字符串)

记录一道后缀自动机的板子题,以及自己对后缀自动机的一些理解,表达能力不强故仅写给自己。

2022-09-03 19:13:32 203 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 238

原创 AcWing1072树的最长路径(树形dp)

题目传送门:树的最长路径题意:求树上相距最长的两点间的距离。思路:由于是无向图,每个点都可以当做是树根,因此,随便选一点作为起点,记录父节点保证向下遍历,获得的最长和次长的离树根的距离便是最长距离。难点:题目有两个较难理解的地方,可以画图来理解① 边权为负数的情况如果离树根为负数,舍弃之,如果所有边权皆为负数,答案为零② 如果最长距离不经过当前根的情况当前根向下遍历,其可以遍历到整棵树,如果该根不经过最大距离,那么肯定是其子树上的某一点,由于为其子树,所以无法再遍历到该点,但正因为该点不为最大

2022-04-08 20:40:44 294

原创 组合数的几种求法

文章目录前言一、组合数的定义二、杨辉三角三、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 5672 1

原创 hadoop组件hdfs文件操作(javaapi形式)

记录一下自己写的java操作hdfs文件系统代码,留给学校的后人。其中user/skl是hdfs的用户目录。import java.io.*;import java.net.URI;import java.nio.charset.StandardCharsets;import java.text.SimpleDateFormat;import java.util.Scanner;import org.apache.hadoop.conf.Configuration;import org.a

2022-04-02 22:01:22 2397

原创 莫比乌斯筛和莫比乌斯反演证明

自己推了一下莫比乌斯反演这种公式类的还是需要自己推过,但以免遗忘,特写此文莫比乌斯函数求法(线性筛):void init(){ mu[1] = 1; for (int i=2;i<maxm;++i){ if(!st[i]) prime[cnt++] = i,mu[i] = -1; for(int j = 0;prime[j] * i<maxm;++j){ st[prime[j]*i] = true; if (i%prime[j] == 0)break; mu[

2022-03-30 20:34:40 347 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 635

原创 abc E - Wrapping Chocolate

题目传送门:E - Wrapping Chocolate题目大意: 有n块给出长和宽的巧克力和m个给出长和宽的盒子,要求能把巧克力都装进盒子里。思路:长和宽二维合起来考虑的话将会非常困难,所以应将盒子和巧克力的数组合起来对一个元素作为主键排序,然后从最大开始,每次遇到盒子的数组就把非主键元素放入集合,遇到巧克力数组就以其非主键元素在集合内查找,找到最小的且不小于当前元素的值并删除,找不到就代表没有符合条件的盒子。代码:#include<iostream>#include<set&

2022-03-27 13:28:33 317

原创 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 355

原创 unity笔记,如何做一个帅气的大招过场动画。

unity可以通过videoplayervideoplayervideoplayer组件在各个平面添加动画,但单单播放视频在横版闯关游戏中是很少见的,我们可能更想要一个帅气的大招过场和酷炫的招式名,这要如何实现呢?首先要添加视频和摄像机到一个空的游戏对象上,这样动画就会直接显示在用户界面:不勾选PlayOnAwakePlay On AwakePlayOnAwake这个选项。然后在人物的c#代码里导入库:在人物按下大招键时播放视频:在线程内监控动画是否播放完成,若是,则关闭视频并让角色做出收尾

2022-02-23 18:55:12 3288 1

原创 牛客寒假训练4--A.R

题目传送门:A.R题目描述:小红拿到了一个长度为 n 的字符串,该字符串仅由大写字母组成。小红很喜欢红色(用’R’字母表示),但她非常讨厌紫色(用’P’字母表示)。她想取一个连续子串,该子串包含至少 k 个’R’字符,且不能包含’P’字符。你能告诉她有多少合法的方案可以取到吗?注:只要连续子串的起始位置或终止位置不同,我们就认为是两个不同的方案。输入描述:第一行输入两个正整数 n 和 k ,用空格隔开。输入一行字符串,该字符串保证仅包含大写字母(‘A’到’Z’)。数据范围:1≤n≤20

2022-02-21 15:08:38 1908

原创 牛客寒假集训营 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 807

原创 AtCoder ABC232 C - Graph Isomorphism

纪念一次蠢到爆的abcabcabc,题目传送门可能太久没打了吧,总之就是非常蠢,c题求的是图的同构,刚开始就觉得只是个npnpnp问题但是复杂度很低,用暴力一定能出来,但是一时间就想不到怎么暴力,就用最容易想到的方法,把图的入度对应,结果只有一个测试点wawawa,想着随机数一下运气好就过了,结果abcabcabc半分钟只能提交一次,我傻傻的在那提交了两页还是没过,由于思维惰性也没去想暴力的事,最后计算了一下随机化过的概率微乎其微,蠢到家了。其实这题一个全排列能做的事,也太久没用就没去想,应以为戒,比赛还

2021-12-19 22:02:46 542 1

原创 纪念在服务器后台跑起来的第一个springboot程序

在对linux和服务器相关都知之甚少的情况下,历时一个月,我终于在服务器后台挂上了第一个springboot的qq机器人程序!下面记录我一路上走过来遇到的各类问题,以便不时之需①mysql的安装①mysql的安装①mysql的安装:在本地我使用的是mysql5mysql5mysql5,但是服务器默认下载的版本是mysql8mysql8mysql8,这两者之间的区别是最令我感到痛苦的,我查阅的大量资料也没法使我mysql5mysql5mysql5的程序在mysql8mysql8mysql8的环境下运行,

2021-12-04 15:54:21 1413

原创 山东省赛 M.Matrix Problem思路笔记

题目传送门题目大意题目大意题目大意: 给出一个由01序列构成的矩阵(该矩阵的外层一定为0),要求得出两个矩阵,这两个矩阵的&与运算与原矩阵相同,且这两个矩阵满足存在于矩阵中的1都是相连在一起的,斜方向相连不算。初步思路初步思路初步思路: 由性质得,除了原矩阵的1以外,一个矩阵取反就能得到另一个矩阵,因此我们只要需要求其中一个矩阵就足够了,且原矩阵的1必须四面与两个矩阵都有相连。突破口突破口突破口: 题目给出了一个看似没有必要的条件,即原矩阵是被0所包裹的,这点应该就是解题的关键。模型化思路模

2021-12-03 22:28:04 267

原创 ac自动机详解(用失配指针实现多模字符串匹配)

ac自动机,是用于计算多个字符串匹配的算法,我们知道,KMPKMPKMP以一种及其巧妙的方式实现了以单模字符串的匹配(以单个字符串去询问其他字符串中是否出现该字符串),现在我们要实现多模的字符串匹配(即以多个字符串去询问其他字符串中是否出现了这些字符串),用KMPKMPKMP显然是不足够的,那么就需要一种新的算法继承了KMPKMPKMP的思想,还要建立在一个数据结构上,它便是trietrietrie字典树。字典树是将字符串分解为单个字符并存在树上的一种数据结构,例如,我们有{“ab”,“ac”,“ba”

2021-11-20 23:12:23 635

原创 汇编指令条件标志判断小记(OF,CF,SF,ZF)

OFOFOF: 溢出标志,用于反映带符号数运算结果的溢出判断,在加法指令中,若两个操作数同号,结果与操作数同号,OFOFOF为0,否则为1(两个操作数异号则始终为0),在减法指令中,若两个操作数异号,结果与被减数同号,OFOFOF为0,否则为1(两个操作数同号则始终为0)。SFSFSF: 符号标志,反映带符号数运算结果,运算结果为负数SFSFSF为1,否则为0。ZFZFZF: 零标志,运算结果为0则ZFZFZF为1,否则为零。CFCFCF: 进位/借位标志,将两个操作数当做无符号数,在加减法指令下,若

2021-11-19 16:16:20 5396

原创 关于贪心排序问题证明的思路启发

考虑这样一个问题:有n头牛,每头牛有重量wiw_iwi​和承重能力pip_ipi​这两个属性,现在要把这几头牛一头一头堆叠在一起,引入PDViPDV_iPDVi​(危险系数)=∑k=0i−1\sum_{k=0}^{i-1}∑k=0i−1​wkw_kwk​ - pip_ipi​,现要求对这几头牛的位置进行排序,使得其中危险系数最大的牛的危险系数为最小。这显然是一道简单的贪心排序问题,影响牛次序的无非就只有两个因素,wiw_iwi​和pip_ipi​,通过直感我们可以得到是wiw_iwi​+pip_ipi​

2021-10-27 16:20:44 141

原创 布斯(booth)乘法详解和例子

布斯乘法是用于计算带符号数乘法的规则,它是通过如下的规定完成乘法运算的:①:booth乘法的乘数和被乘数还有结果都应由补码表示。②:booth乘法计算前应在乘数末尾补零。③:booth乘法的符号位参与计算。④:booth乘法应以双符号位方式进行计算,防止结果溢出。下面通过例子展现x=-6,y=-7,booth乘法完整过程:...

2021-10-18 17:37:37 16371 2

原创 关于如何实现一个至简的麻将模拟程序的思考

想做一个模拟立直麻将的程序,但是仔细思考了一下,由于麻将和牌牌型太多了,光是判断和牌牌型和计算役种番数的算法就相当困难,如果直接动态计算手牌和牌牌型的话,每次都根据不同情况要跑一遍算法,耗时太大,如果使用二分查表的算法的话也没有表可以查,因此我想,可不可以简化一下麻将,并使其不失麻将二则,根据牌山牌河出牌的乐趣和随机性造成的多样情况呢?中,发,白三元牌是我首先想到的,毕竟和出大三元是令人快乐的,因此,我把全部的麻将牌都换成中发白,并把牌总数控制为3214,84张,也就是每种牌28张。接下来考虑役种,可和

2021-10-15 11:45:20 1066

原创 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 68

原创 计算机中整数,定点数,浮点数的表示

文章目录前言一、计算机中整数的表示1.原码2.移码3.反码4.补码二、计算机中定点数的表示三、计算机中浮点数的表示1. 规格化浮点数的表示2. 非规格化浮点数的表示前言因为学校里教计算机系统基础的老师属实垃圾,几堂课下来讲的不明不白,所以特自己总结该部分内容。一、计算机中整数的表示1.原码原码的表示十分简单,由一位符号位和几位数值位表示,符号位为1表示负数,0则为正数。2.移码所谓移码,就是将原本表示的数值加上一个偏置常数所得的数,通常是加上编码位数的最高位,即2^(n-1) 或 2^(n

2021-09-28 21:58:33 4699

原创 atcoder点阵坐标计算两题

点阵和直角坐标系一直都对我造成了较大的困扰,现借atcoder中的两题好好总结下该类题的计算方法。一:点阵求两图形是否全等。题目链接:C-Shapes题目大意:给出两个点阵,求经过旋转和平移后两图像是否全等。方法:分别找到最左最右最上最下的坐标并记录,然后原图从左下遍历至右上,分别标记对照图从四角开始遍历的图形情况,如果有一个角遍历完成后图形与原图吻合则成立。代码:#include<bits/stdc++.h>using namespace std;int const N = 2

2021-09-27 23:05:31 229

原创 JAVA--Lambda表达式

在JAVA中有种神奇的表达式–Lambda表达式,它可以在特定情况下代替匿名内部类使用从而极大减少代码量。一:Lambda表达式的使用要想满足Lambda的使用条件,就必须保证它所重写的是一个只带一个方法的接口,Lambda的格式是(参数)->{代码块}。二:Lambda表达式的作用Lambda表达式可以用作一个实现了接口的类使用,例如:public interface Sum { int add(int x,int y);}新建一个接口public class Lambad {

2021-09-13 21:21:16 90

原创 C++与JAVA迭代器的使用

C与JAVA对比的第二篇:迭代器是一个我平常写题很不重视的一个方面,导致一些简单题会因为语法问题卡很久…现在既然JAVA学到了迭代器的使用,那我也来顺便做个总结吧。一:迭代器是什么,有什么用?迭代器是对C++stl容器和JAVA API类内部元素下标访问的一个方法,由于本身不支持数组的直接访问(除vector和map),需要通过迭代器进行访问,由于在像map这样的容器往往不知道内部元素个数,因此迭代器也能进行一个较好的访问和避免越界。二:迭代器的创建:C++中有分为iterator和auto两种迭

2021-09-08 15:13:11 222

原创 C++与JAVA两种简易的字符串内元素排序与重组

最近在赶JAVA进程(终于要偿还暑假的无所事事了QAQ)。发现很多情况下JAVA实现一段代码,特别是数据类型的转化时比C要方便的多,有一些内置的类方法可以直接实现一些C无法实现的操作,比如说:String[] strArray = s.split(" ");这样的构造可以直接以一个分隔符分割一个字符串为一个字符串数组StringBuilder sb = new StringBuilder();sb.append(arr[i]);这样的数据类型和方法可以直接组合一个int类型的数组为一个字符串

2021-09-07 20:23:58 146

原创 混合背包二进制优化(伪万能背包模板)

今天在准备背包问题的算法模板时,突然想到上学期遗留下的一道混合背包问题,当时刚接触c语言,遇到这种题自然是一筹莫展,写的背包不是超时就是超空间,也有写过二进制的优化,但都以失败告终,如今看来,此题便是不攻自破了,顺便把它写成了万能的背包模板。题目如下:该题因为数据量较大,要用到优化来解决超时的问题,我选择了二进制优化,把混合背包转化成0-1背包问题。二进制优化的原理十分简单,就是通过二进制拼出自然数的方法将一个多重背包拆成几个0-1背包,例如,7可以拆成1,2,4三个数,这三个数能拼出1-7的所有数

2021-06-15 17:42:03 316 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 277

原创 2021-06-10atcoder解题报告D - Kth Excluded(差分+二分法)

题目传送门:D-Kth Excluded初看该题,我天真的以为要用到stl的set或list,自我否认之后想到了用缺数二叉搜索拼出该数的方法,苦于没有合适的解法,经学长点拨后才知道原来还有差分数列这种东西,实在是太丢人了呜呜呜呜。差分在该题的应用就是对应原数列的前面所缺的总数,再通过以前一个被移除数定位所查找的数。#include<iostream>#include<algorithm>#include<cstring>#include<cmath&gt

2021-06-13 23:03:21 327

原创 链式前向星和优先队列实现有向图/无向图的最短路)

链式前向星和优先队列实现有向图/无向图的最短路(解题日志)先看例题:poj3268银牛节题目大意:各个农场派一只奶牛去指定农场参加银牛节,计算在选择最优路径时耗费最多时间。题目解析:由于m为10^5本题用普通的邻接列表必然超时,因此学习新的方法链式前向星,相比较前向星而言时间复杂度仅为O(m)。算法解析:该算法是将起点相同的路径归为一类,然后每个路径节点的next指向上一节点,第一个节点则指向-1。样例实现最终图示(以x为起点):诶嘿(*・ω< ) 。添加路径代码:void add(

2021-05-20 19:54:54 404

原创 最小生成树两种常用算法

最小生成树的简易实现一: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 2934

原创 最长不下降子序列(复杂度较低的方法)

最长不下降子序列随笔参考文章最长不下降子序列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 371

原创 欧拉图的简易实现

欧拉图的简易实现今天学习了欧拉图相关知识,感觉网路上的教程都过于繁琐(最后还是自己看源码弄懂的),在此谈谈自己对欧拉图的理解。①欧拉图的作用:欧拉图是为了解决经过图的各个连接图的线路问题,例如经过各点的连线方案(ps:实际上就是经过各点画一条线,线不能重叠),至于欧拉回路和欧拉通路的区别,在此不多赘述,反正实现起来都一样。②欧拉图的实现:实现欧拉图首先应该找一个有奇数连线的点(就是进去后无法出来的点)作为起点,如果点有两个以上,就表示没有能够实现欧拉回路的方案(划线必定重叠),如果没有也没有关系,

2021-04-27 18:36:42 1131

原创 KMP算法讲解(写给自己)

今天学习了KMP算法,相较于暴力匹配来说,KMP算法能够节省大量的时间,是一类想当精妙的算法,为了防止以后遗忘,特写此博客:什么是KMP算法?KMP算法是的作用是判断字符串s2是否为s1的子串,并返回下标,作用类似于strstr,但KMP的好处在于速度很快,这一点不仅在竞赛的时候拥有极大的优势,在项目设计的匹配算法中也有应用。KMP算法的实现①:前缀后缀的转移,KMP算法的核心在于字符串前后缀的一个跳转,以此来节省时间,在字符串的比较中若是后缀后的字符匹配不能,就跳转到前缀来继续匹配,就相当于从原本

2021-04-14 21:43:16 210 5

原创 概率dp入门解题报告两则

概率dp入门解题报告两则刚接触概率dp,看过各位大佬的解题报告后不禁感慨,即便是最简单的dp和其他的一些小技巧结合起来也会变得难以理解(大概是我太蔡了吧…)。对着源码琢磨了数小时后终于获得了一些理解,下面和同学们讲解一下我对这两题的理解。/ * 这是第一题 * /POJ 2096 Collecting Bugs 题目大意:有一位程序员寻找bug,有n种bug存在于s个子系统中,问其集齐所有bug的期望。解题思路:这题比较简单,根据题意写出状态转移方程即可。总共有4种可能:在同一类,同一种;不在同

2021-04-08 22:59:09 110

空空如也

空空如也

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

TA关注的人

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