自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 双亲委派机制

当我们装载一个class时,递归向上,将class交给父加载器处理,不能处理的再由子加载器处理。任何父加载器返回为null的加载器,父加载器都为bootstrap classloader.优点:双亲委派保证了class被加载一次。因为保证了class与classloader的层级关系。所以一个class总是交由一个classloader处理。要注意,同一个class交由不同loader处理,会产生不同class,而同一个loader会读缓存,返回相同class。同时,由于委派给父加载器,可以避免核心

2022-02-08 16:05:55 424

原创 HTTP各版本

Http2.0 与 Http1.1的区别1,http2.0 使用io多路复用,解决了http1.1TCP连接数达到上限的问题,http2.0 凭借io多路复用允许多个请求-相应在一个同域名下的TCP链接中进行。同时,单链接也减少了慢启动带来的低速。2,http2.0 在应用层与传输层之间加了一个二进制分帧层。将一个http1.1的包转化成更小的二进制格式的帧。header frame & data frame。3,首部压缩:HPACK算法。4,服务端推送(server push):服务器可以

2022-01-24 14:39:52 1536

原创 TCP实现方案

TCPreceiver这个部分建立在stream reassembler之上,为stream reassembler提供起始地址,字符串与结束标志。从TCPsender接受TCPsegment。这里我们只关注TCPsegment中的几个字段。TCPreceiver:我们主要关注seqno,syn,fin,payload。(定位,标记,数据)TCPsender: ackno,win_size(用于控制发送方的发送范围)具体实现segment_received(const TCPSegmen.

2022-01-12 19:35:21 1239

原创 关于java中String被设置为不可变的理解

众所周知,JAVA中把String类设置为不可变的。在源代码中,是用一个private final char[]来表示字符串的。并且String类也是final,这就导致类无法继承String或数组,并且String类没有暴露修改数组的方法。但是,我们知道final修饰基本类型则无法更改值,修饰指向类型则无法修改指向。那么String中final修饰的是数组,我们可以轻松的利用反射去不更改地址得同时更改String值。所以,String的不可变性是依靠开发者对源码的细心维护,不暴露可以修改Strin

2021-12-07 20:22:18 179

原创 设计模式学习

原则核心:尽量面向接口 -> 最终目标:松耦合。一,单一职责原则每个(类/方法)只负责属于自己的所有任务,增加代码可靠性,防止应修改代码导致其他类错误。在可行的条件下应尽量遵守。二,接口隔离原则1,客户端不应该依赖不需要的类。2,类对类的依赖,应该建立在最小的接口,即剔除较高层接口中不需要的接口。故接口设计时,应有分解的意识。三,依赖倒置原则核心:面向接口编程1,高层模块不依赖低层模块,而应依赖抽象。2,抽象不依赖细节,细节应依赖抽象。原因:抽象即设计,其稳定性高,细节由实现类

2021-12-06 20:29:59 167

原创 os 学习摘记

关于隔离性进程:cpu的抽象,强制应用的时分复用,用户/内核模式。页表:内存隔离,进程提交自己的页表,由虚拟地址指向物理内存地址。文件:磁盘隔离。

2021-11-25 20:52:37 333

原创 2021 ICPC沈阳 M -- String Problem

有个SAM的经典模板题,找第k下子串,这里就是最大串,其实可以类比。因为是最大串,我们可以直接从根往最大的节点去找,每次都这样向下dfs,随之串长增大,那么我们就可以得到最大字符位置及后面所有位置上的最大子串位置。同理,对于最大字符之前的一个字符位置到上次我们找到的最大字符位置,我们知道在不到上一个最大字符与次大字符之间的整个串都是某个前缀串的最大子串。我们可以通过fail树得到次大能匹配到的字符位置。复杂度O(n)。//// Created by acer on 2021/2/16.////判

2021-11-25 14:00:32 1288

原创 2020 ICPC沈阳H题(dp+二分)好题

TP由于题目中出现了非常多的1e9范围的数据,所以能够拿来跑循环的一个是n(套餐种类),一个是m(每次哪天租几次),同时∑qi<=3e5\sum{qi} <= 3e5∑qi<=3e5也很令人在意,然后发现几乎不可能再m上直接设置状态,因为时间复杂度会变得非常不合理,所以选择在∑qi\sum{qi}∑qi上转移,每次租车都属于某一天,那么我们可以根据相隔天数讨论,如果符合可以直接转移,否则在∑qi\sum{qi}∑qi上二分,由于我们在开始时会对天数排序,那么越往后天数也会越大。知道我们找

2021-11-19 13:32:20 770

原创 系统调用与中断(个人思考与整理)

以下在单核CPU的情况为标准目态与管态计算机cpu运行状态有两种:管态与目态(用户态)。用户态只能运行用户程序,管态能够运行系统程序。管态是与目态不同的cpu运行状态,在单核cpu的情况下,cpu需要不断的切换状态。系统调用操作系统为我们提供了一种方便用户程序访问内核的途径,即系统调用,即从目态转向管态。系统调用的一般情况一般来说,我们需要使用系统调用的情况基本与操作系统硬件有关,比如系统i/o等。这些操作在系统认为是危险操作,即用户无权进行直接与硬件的控制,只允许请求操作系统调用指令。用户

2021-09-28 19:55:04 1566 2

原创 实现图片在前后端的传输

首先前端使用vue,element调用jsonUploadChange(file) { const isImage = (file.raw.type === 'image/jpeg' || file.raw.type === 'image/png' || file.raw.type === 'image/gif'); const isLimit = file.size / 1024 / 512 < 1; if (!isImage) { this.$

2021-09-12 19:09:52 2852

原创 Vue实现记住用户状态时的页面跳转

在我们登陆完成时,我们不希望令某些页面时=是登录前的状态,或者跳转方式改变,那么这时候既可以使用导航守卫。官方文档这里加上路由元信息,遍历组件针对性的管理页面。router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requireAuth)) { if (localStorage.getItem('token')) { if (to.n

2021-09-11 21:09:24 216

转载 实现前后端分离的登陆验证token思路

在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下:1、第一次登录的时候,前端调后端的登陆接口,发送用户名和密码2、后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token3、前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面4、前端每次跳转路由,就判断 localStroage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面5、每次调后端接口,都要在请求头中加token6、后端判断请求头中有无token,

2021-09-11 16:22:10 3826 1

原创 后端跨域问题解决

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

2021-09-11 12:59:09 673

原创 xiaoxin juju needs help - 组合公式

学组合数不久,对二项式定理的熟悉程度还是太低了。这是一个经典的球与袋问题。求将n种球放在m个袋子里的方法。∑num[i]=m\sum_{num[i]}=m∑num[i]​=m根据二项式可以推理,首先若球全部不同,即有m!m!m!种方法,除去有球相同的情况只需m!/num[i]!m!/num[i]!m!/num[i]!。#include <bits/stdc++.h>using namespace std;#define int long longint num[30];const

2021-08-18 19:04:30 131

原创 杭电多校第9场1007 Integers Have Friends 2.0

题意从一个数列中找出一个子序列,使得子序列每个数模一个数同余,求最长长度。首先我们容易发现,对于模数2,一个数要么余1,要么余0,那么一个序列至少有n/2个同余的。然后我们写一个式子amod  x=bmod  xa\mod x = b \mod xamodx=bmodxa−bmod  x=0a-b \mod x = 0a−bmodx=0即a与b之差即同余的模数,这个余数可以被拆成很多质因数,也是可以使a,b同余的模数。一个小与4e12的数最多能由11个不同的质因数相乘得(这步可以打表证明)。那么

2021-08-18 12:37:54 162

原创 CF734E Anton and Tree 树上缩点

传送门思路把连通块缩成一个点,然后就可以直接转化成一个相邻点颜色不同的树。那么把这颗树变成同色,只需要(树的直径+1)/2就可以了。很简单的思路,然年被我实现搞出了无数个问题。总之就是非常离谱离谱的提交记录。#include "bits/stdc++.h"#define pii pair<int,int>using namespace std;const int N = 2e5 + 10;int head[N << 1];int head2[N <<

2021-08-16 21:26:25 139

原创 CF14D Two Paths 树的直径

求树上两条不相交路径长度乘积最大值。暴力枚举断边求两个子树直径乘积即可。#include "bits/stdc++.h"#define pii pair<int,int>using namespace std;const int N = 1e5;int head[N];int cnt;struct node { int next, to, id;} a[N];void add(int u, int v, int id) { a[++cnt].to = v;

2021-08-16 15:55:53 137

原创 NC19822 我不爱她 kmp+hash

链接:https://ac.nowcoder.com/acm/problem/19822来源:牛客网题目描述终于活成了自己讨厌的样子。天空仍灿烂,它爱着大海。你喜欢大海,我爱过你。世界上充满了巧合。我们把每句话当成一个字符串,我们定义a对b的巧合值为a的最长后缀的长度并且它是恰好是b的前缀,这里的后缀或者前缀包括字符串的本身。比如字符串“天空仍灿烂她喜欢大海”对“她喜欢大海我不爱她了我爱的只是与她初见时蔚蓝的天空”的巧合值为5,而字符串“她喜欢大海我不爱她了我爱的只是与她初见时蔚蓝的天空”对“

2021-08-13 15:50:28 141

原创 hdu多校8-7060 Separated Number 组合数

题意给你一个非常长的整数,请你把整数分成连续的k段,请你求每种分法每一段的和的和。如100: ∑\sum∑((100),(1)(00),(10)(0),(1)(0)(0)) = 112思路经过简单的思考,我们可以想到,对于每一段数字,他的长度必在[1,len-k+1]之间。再深入思考,一段数其实并不好想,我们针对每一个数进行拆解。即取出其中一个数字num,可能有num10,num100,…。所以只需要想象一个隔板,枚举隔板与num之间有几个0,剩下的隔板只要不在这中间都可以随便插。但是如果手推一下

2021-08-12 20:52:48 184

原创 P3048 [USACO12FEB]Cow IDs S

题意FJ给他的奶牛用二进制进行编号,每个编号恰好包含K 个"1" (1 <= K <= 10),且必须是1开头。FJ按升序编号,第一个编号是由K个"1"组成。请问第N(1 <= N <= 10^7)个编号是什么。首先手动模拟样例,发现如果从后往前枚举,当第i位为1后面总的情况都是C(i-1,k),k为当前1个数,每确定一个1,k都会减小。那么不就剩暴力了吗,预处理组合数,k只需要10个,所以底数即使开1e6个都是够的,也不要怕爆int,因为能爆int得数我们不可能取,所以爆i

2021-08-11 14:57:11 157

原创 Link with Balls - hdu 7047 - 生成函数解法

题意给出2n个箱子,可以从2x-1th箱子取kx个球,可以从2xth箱子取至多x个球,那么最终取m个球有几种方法。思路如果了解过生成函数相关知识的话,应该不难发现每个箱子都有各自的生成函数。F(x)=1+x+x2+....+xn   (the    n−th)F(x) = 1 + x + x ^2+ .... + x ^n \ \ \ (the \ \ \ \ n-th )F(x)=1+x+x2+....+xn &nb

2021-08-11 13:39:35 182

原创 2021牛客暑期多校训练营8-D-OR

为什么人均都会只有我卡一下午????????这道题应该先处理出两个序列,一个是a[j],ap[j-1]的与序列,一个是或序列,然后枚举每一位是否可以为0或1,累乘入答案即可。注意当与和或都为1时,确定这意味必须是1,与和或都为0时,必为0。#include <bits/stdc++.h>using namespace std;#define int long longconst int N = 1e6 + 10;const int mod = 1e9+7;int a[N];int

2021-08-09 19:09:22 102

原创 P1725 琪露诺 - 单调队列优化dp

虽然只是一道绿题,但也挺有意思的。题意你需要从0跳到n,每个点上有价值A[i],到达一个点就能得到A[i]价值,但是你每次只能跳到[i+l,i+r][i+l,i+r][i+l,i+r]上,问超过终点的最大价值是多少。朴素的dp很好写,当然,速度也很拉跨。我们能发现每次转移到i的点都是在[i-r,i-l]间的,这个可以用一个单调队列来维护,那么唯一要解决的问题就是入队时我们要保证队列内没有pos>i-l的,这一点我们可以延迟入队,在遍历第i个点时再推入i-l,就解决了这个问题。#include

2021-08-06 18:43:19 158

原创 cf1504-Balance the Bits

cf的构造题果然不会让人失望虽然我写不出来,但是这道题仍然很有意思。题意构造两个合法的括号序列,使得这两个括号序列第 ii 个字符相同当且仅当 ai=1a_i =1ai​=1。看到题意之后果断进行一个模拟,发现了若a1=0∣∣an=0∣∣n&1∣∣zero&1a_1=0 || a_n= 0 || n \&1||zero\&1a1​=0∣∣an​=0∣∣n&1∣∣zero&1,那么必定无解。然后就开始瞎写了我们仍然需要一个合理且有条理的思路。比较容易

2021-08-06 16:40:29 101

原创 Typing Contest - hdu 7033背包

枚举总的f大小作为背包容量即可,f为0的可以直接入答案,难就难在发现f的枚举有效范围在[1,sqrt(n+2)]之间,然后就是输入输出,直接用浮点或者什么双精度肯定是错的,建议用字符串模拟读入输出,不然会wa到怀疑人生。#include "bits/stdc++.h"using namespace std;#define int long longconst int N = 2e4 + 100;int f[N];long long s[N];long long dp[N];inline v

2021-08-06 11:09:51 95

原创 CF1042E Vasya and Magic Matrix

传送门题目看完立马就有想法的题。首先肯定不能二维做,先把矩阵拍成一维,以权值排序。然后肯定就是O(n)的做法。根据题意,转移只能是单向的,那么大的权值肯定由小的转移而来,设dp为i位置值的期望那么有转移:dp[i]=∑j=0i−1dp[j]+(xi−xj)2+(yi−yj)2idp[i] = \frac{\sum_{j=0}^{i-1} dp[j] + (x_i-x_j)^2+(y_i - y_j)^2} {i}dp[i]=i∑j=0i−1​dp[j]+(xi​−xj​)2+(yi​−yj​)2​

2021-08-04 19:50:50 110

原创 P5104 红包发红包 期望入门

题意:假如现在有w元,那么你抢红包能抢到的钱就是[0,w]等概率均匀随机出的一个实数x。现在红包发了一个w元的红包,有n个人来抢。那么请问第kk个人期望抢到多少钱?思路首先我们先算第一个人的期望,他选择每种金额的概率相等。故易得:F(x)=xw(0<=x<=w)F(x) = \frac{x}{w}(0<= x <= w)F(x)=wx​(0<=x<=w)这是一个离散型函数,我们对其求导得f(x)=1wf(x) = \frac{1}{w}f(x)=w1​E=

2021-08-04 15:24:55 138

原创 Display Substring -hdu6988 2021杭电多校 -SAM+二分

题目需要求第k小价值的子串价值,和一个经典题型很相似,所以应该能想到用SAM/SA做。所以我们需要二分找有几个串价值比当前价值小,这个过程使用二分答案,套一个SAM,在SAM内遍历所有点,因为子串长度和价值是成正比的,所以在每个点上二分长度,统计一共有几个子串然后与k比较。//// Created by acer on 2021/2/16.////判断子串,不同子串个数,所有子串字典序第i大,最长公共子串#include "bits/stdc++.h"#define mem(x, i) m

2021-07-31 11:30:20 162

原创 P4070 [SDOI2016]生成魔咒 - SAM

这是一道板子题,考的是一个状态中不同子串数量为len[i] - len[fa[i]],即集合中最长的后缀减去最短的后缀。不过这题我遇到的问题在于字符集过于庞大,最后是通过用map去代替ch数组解决。//// Created by acer on 2021/2/16.////判断子串,不同子串个数,所有子串字典序第i大,最长公共子串#include "bits/stdc++.h"#define int long longusing namespace std;const int MAXN

2021-07-29 20:24:58 94

原创 P3975 [TJOI2015]弦论 - 后缀自动机(SAM)

这是一道板子题的改编,意在加深对求第k小子串的理解。首先先看一下最简单的SAM板子。相信应该都写过了才会写这题//// Created by acer on 2021/2/16.////判断子串,不同子串个数,所有子串字典序第i大,最长公共子串#include <cstring>#include <iostream>#include "string"#define mem(x, i) memset(x,i,sizeof(x))using namespace s

2021-07-29 19:12:04 134

原创 Rise in Price - hdu6981

首先容易想到的是每一格都是由上或左转移而来,并且经过格子必将钻石取完。dp的话空间不够,所以思考其他方法。由于每格转移到本格都是增加本格的数量和价值,所以我们只需要考虑到本格之前的最佳状态即可。因为状态由两部分组成-价值和数量,价值乘数量大的肯定优。所以我们存下所有可能的状态,从其中挑选最优的一些解转移。所有的状态有C2nnC_{2n}^nC2nn​个,经过优化只有几千个状态有可能~~(出题人说的,我还是没法严谨的推出来结果)~~ 。#include "bits/stdc++.h"#define i

2021-07-28 17:58:24 233

原创 Black and white -2021牛客暑期多校训练营3

经过仔细地观察题目,我们可以发现当我们取矩阵中任意一个点时,我们都会得到这一列和这一行的贡献,故能够想到把每次获得的行列加入一个集合,若集合中包含了所有的行列说明我们一定可以构建出这个矩阵。下面是克鲁斯卡尔的代码#include "bits/stdc++.h"//#define int long longusing namespace std;const int N = 6e3+10;int fa[N<<1];struct node{ int x,y,v;} f[N*N

2021-07-28 10:38:49 119

原创 CF449D Jzzhu and Numbers

传送门很有意思的题目,考验对容斥的熟悉程度和对状压dp的理解。首先我们再在翻译的基础上转化一下题意。设f[i]为恰好i个1,g[i]为至少i个1。也就是一个子集满足&的结果1的个数恰好为0个。因为至少0个的包含至少一个的,形成了容斥。 f[0]=∑i=0(−1)ig[i]\ f[0] = \sum_{i=0}(-1)^ig[i] f[0]=i=0∑​(−1)ig[i]故我们的任务变成了统计g[i]。这时候用SOS dp,令形如i&k==i的像这样进行转移dp.

2021-07-23 17:03:46 204

原创 The xor-longest Path - 01字典树

挺简单的一个入门题。只要清楚以下几点。1,一段子串异或和等于两个前缀异或和的异或2,01字典树的定义3,会dfs即可做到以上就没有什么思维难度和代码难度了。#include "bits/stdc++.h"using namespace std;const int N = 1e5 + 5;int head[N<<1];long long cnt = 0;int ch[N * 32][2];int val[N * 32];struct node { int to,

2021-07-20 20:46:54 91

原创 League of Legends -- 2021牛客暑期多校训练营2

题意:把给出的n条线段分成k组,使得每组都保证线段有交,或者是一条线。求最后所有k个组交的长度的和。想做这道题首先要搞清楚几个点:1,怎么处理复杂关系的区间。2,知道是dp之后,怎么推转移方程。3,如何进行优化。这里面最难想的可能是第一个点了。因为在做这道题前我已经假定这道题是dp题,于是我首先试着写一下转移方程for(int i = 1;i <= 0;i++) //n person for(int j = 1;j <= k j++) //k group

2021-07-20 09:26:24 470 1

原创 UVALive 7040 Color -二项式反演

二项式反演裸题+组合数递推思路待补充#include "bits/stdc++.h"#define int long longconst int maxn = 1e5 + 10;const int MAXN = 1e6 + 10;const int mod = 1e9 + 7;using namespace std;void Exgcd(int a, int b, int &x, int &y){ if(b == 0) { x = 1;

2021-07-17 10:44:46 120

原创 Halloween treats - 鸽巢定理

题意输入 cc 和 nn,代表有 cc 个孩子和 nn 户邻居。接着一行输入 nn 个数字,代表万圣节时每户邻居会给孩子们的糖果数量。孩子们想要去若干个邻居访问,然后拿到糖果。他们想要糖果能够平分,输出访问的邻居编号。思路题目规定了c<=n,从这里我们可以尝试找关系。由于是求最后能平分,我们直接在读入时就可以取模。然后发现得到的数列 0 <= ai <= c-1, 下一步我们怎么想都只能尝试对其求前缀和并取模,0 <= sumi <= c-1,这一步出现了sumi =

2021-07-16 16:09:53 107

原创 B. Plus and Multiply 构造分析

说实话,如果不靠猜,这题需要想很久,但是因为复杂度关系,总是会忘a的幂次上想,就能蒙对。下面看一下我怎么理清这题关系的。首先,题目告诉我们一个数是由1而来的。同时有一个乘数mul,一个加数add。我们首先瞎写一个式子。比如((mul*(1+add)+add)*mul +add)*mul看起来很复杂,我们对其进行化简。mul*mul*mul + mul*mul*mul*add + add*mul*mul + add*mul答案就在上面这个式子里。我们可以看到无论是怎样复杂的式子,由于任何数都是来自

2021-07-14 20:39:59 486 1

原创 P1220 关路灯

题目描述某一村庄在一条路线上安装了 nn 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电。他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯。开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大的一边,再回过头来关掉另一边的路灯

2021-07-10 10:50:29 235

原创 Blood Cousins - 树上启发式合并+倍增

题意: 在一个森林中,如果两个节点a和b向上的第p个祖先相同,就称他们为p代表亲。(跟日常生活中有所不同,p不一定是他们的最近公共祖先)。给出一些询问,问v的p代表亲的数量。看起来挺麻烦,但如果我们转化一下题意,就是找一个节点的有几个同深度的子节点。所以只需要在输入时,把题目给我们的v,p,通过倍增转化成u,dep,这里的dep是相对于u的。那就是一道裸的dsu on tree 板子了。//// Created by SANZONG on 2021/7/6.//#include "bits

2021-07-09 16:12:45 93

空空如也

空空如也

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

TA关注的人

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