自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常见错误总结

博主今天因为debug\text{debug}debug的事被教训了所以记录一下在debug\text{debug}debug的过程中都发现了什么智障错误取Mod\text{Mod}Mod的时候注意输入也可能超出范围,最好在输入的时候取一下模。取模最好用函数操作进行+−∗/+-*/+−∗/之类的,要不然代码又长又容易写晕还容易取漏...

2020-10-25 22:53:04 34

原创 TO DO LIST

鉴于本人学习顺序比较杂乱,列一个blogblogblog监督自己练习部分 AGC Blue and red tree NOIP历年真题(看到我请督促我写blogblogblog) DFS基础题单(练手感+夯实基础) 提高难度的DFS题单(训练一下自己写暴力能力) 线段树题单 DP题单...

2020-08-01 14:41:04 83

原创 友链&个人(并不完整)

可爱的小姐姐淼淼

2020-04-10 10:11:26 247

原创 关于ZnCu

前言:这是咕了很久的一篇CSP2019CSP2019CSP2019总结,由于本人太菜+++这次发挥失常太严重,很久很久才走出这次比赛的阴影。AnywayAnywayAnyway我会在今年奋起直追,努力拼搏,不留遗憾 。这次CSP发挥的确实不好,除了当天考试状态外自己实力确实不够也是一个很大的问题。故总结这一个多月来的表现,力求下次CSP能高分省一。集训期间学法小结,得与失&学习方法反...

2020-01-05 00:10:51 563

原创 小的注意点

状态压缩DP复杂度为2n2^n2n,适用于n≤30n\le30n≤30

2019-10-18 14:57:34 37

原创 c++查看程序静态内存

由于CSPCSPCSP最有把握也是期望得分最高的一道题因为MLEMLEMLE挂零了,所以学了一手如何查询程序静态内存在所有变量定义之前先设定一个charcharchar类型变量,此时指向的地址就是程序最开头的内存地址,同理在最后也设定一个,指向所有变量之后存储的内存地址,两个地址相减得到了占用的内存字节。一般看程序内存都是MMM为单位,所以转换一下/1024/1024/1024/1024/1024/1024就好了。#include <bits/stdc++.h>using namespa

2020-12-04 16:52:57 281

原创 2020-11-28NOIP模拟T1【区间DP】

这道题一开始被卡贪心思路然后发现大样例都过不了良心大样例对于一个数列2 4 2 3 4 32\ 4\ 2\ 3\ 4\ 32 4 2 3 4 3,贪心思路只取444,但是显然取2 32\ 32 3更优。正解:区间DPDPDP,看到对于区间操作求最值,但又不是维护一些最大值最小值之类的区间性质的时候,就可以联想一下区间DPDPDP的方法。具体做法:令f[i][j]f[i][j]f[i]

2020-11-28 22:39:27 47

原创 琪露诺【单调队列优化DP】

琪露诺#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>using namespace std;const int N=400000+50;int a[N],q[N],f[N],head=1,tail=1,p;int n,l,r;int ans=0;inline int read(){ int

2020-11-06 11:10:36 34

原创 2020-11-05NOIP模拟T1【二分染色】【DP/01背包】

思路原题链接(考试题不要求输出方案)第一步:建反图这道题如果想到了建反图思路就很明显了。建反图:如果两个人不互相认识,就连一条边。对反图求出所有连通块。容易发现在反图里连通的点一定不是相互认识的且在反图中不同连通分量中的点一定是相互认识的,那么就是说如果在反图里有边那么在原图里一定不能在同一个集合中。对相邻的顶点进行二分图染色,如果相邻点可以被染成不同颜色,那么就可行,反之不行。那么这道题就是在反图上进行二分图染色判断。第二步:010101背包考虑这个染色问题的附加限制条件:要使两个集合的人数尽

2020-11-06 11:08:46 32

原创 2020-11-05NOIP模拟测T2

原题链接但我没加多组数据爆零了zbl题目中提供了一个跑路器概念,即走2k2^k2k长度需要1s1s1s,容易发现对于一条边,相当于202^020,所需时间也是1s1s1s,那相当于能绕2k2^k2k条边到达的点就可以连一条长度为111的边跑最短路。倍增判断从一个点到另一个点绕2k2^k2k次边是否可达即可。观察数据范围发现FloyedFloyedFloyed可过,最外层循环判断从一个点到另一个点绕2k2^k2k次边是否可达,内三层就是FloyedFloyedFloyed。总复杂度O(n3∗32)O(

2020-11-06 08:17:52 28

原创 矩阵快速幂

【模板】矩阵快速幂去年这个时候也是在学矩阵快速幂,但去年抄的ACACAC代码自己都看不懂了。。。神仙题解主要是用来优化递推的,对决策递推式构建一个矩阵然后快速幂就好了不知道为什么写的函数乘就错了,写重载运算符就对了,初始buildbuildbuild函数最好写在结构体里,或者记得加上&\&&记得long longlong\ longlong long#include <bits/stdc++.h>#define ll long long

2020-11-05 09:10:44 17

原创 2019-CSP-S划分

划分myymyymyy证明这道题其他博客已经讲的很清楚了,就是发现这个转移满足单调性然后能满足后面的一定满足前面。主要讲讲为什么单调队列的转移为什么是q[l+1]q[l+1]q[l+1]而不是q[l]q[l]q[l],由这道题目转移的性质,我们要把这道题决策点的转移尽量卡满(能靠右一定要靠右),那如果满足单调队列里队头决策点的下一个决策点能转移,那么当前队头决策点就一定能被弹掉。如果q[l]q[l]q[l]被弹掉了q[l+1]q[l+1]q[l+1]不一定能满足,那么这道题单调队列转移就会出问题。同时

2020-11-04 21:10:58 357

原创 2020-11-03 NOIP模拟 T2

题解对于nnn较小的情况进行动态规划。令f[i][j]f[i][j]f[i][j]为当前有i张重掷符卡,当前骰子点数为j,可能的最大期望伤害。如果使用了重掷符卡,那么从1+16∑k=16f[i−1][k]1+\frac {1}{6}\sum^{6}_{k=1}f[i-1][k]1+61​∑k=16​f[i−1][k]转移,否则丢弃这张符卡从f[i−1][j]f[i-1][j]f[i−1][j]转移。打表可以发现对于充分大的iii,f[i][j]=f[i−1][j]+1f[i][j]=f[i-1][j]

2020-11-04 09:24:35 23

原创 2020-11-03 NOIP模拟 T1

题意构造一棵树使其中恰有aaa个点度数为111,bbb个点度数为333,或输出无解。首先一个很显然的,如果b>a+2b>a+2b>a+2那么一定是无解的。然后b=a−3b=a-3b=a−3时一定也是无解的↓↓↓证明:设树上除了这a+ba+ba+b个点还有ccc个点,总点数为nnn,第iii个点度数为did_idi​,则假设b=a−3b=a-3b=a−3对于度数关系有2(n−1)=a+3b+∑icdi=a+3(a−3)+∑icdi2(n-1)=a+3b+\sum^{c}_{i}d

2020-11-03 21:59:53 36

原创 2020-11-02 NOIP模拟T1

题解使用操作111只是为了给操作222或操作333凑整,因此问题变为递归考虑在进行了x1x1x1次操作111后再进行x2x2x2次操作222或者操作333使得(x1+x2)(x1+x2)(x1+x2)有最小值即可。于是按照这个思路对问题进行分治处理,设fnf_nfn​为将nnn操作到000所需要的最小次数,可以得到如下式子:fn=min{fn,f(n/2)+(n%2),f(n/3)+(n%3)}f_n=min\{f_n,f_{(n/2)}+(n\%2),f_{(n/3)}+(n\%3)\}fn​=

2020-11-03 10:15:45 42

原创 Vigenère 密码

VigeneˋreVigenèreVigeneˋre 密码简单题已经不会了,碰上简单题先不要着急写代码,告诉自己冷静下来一定能做出来,不要胡乱着急瞎写代码然后调很久浪费大量时间,冷静分析好性质和做法之后再写。暂时没想出来也不要慌,多造几组数据手玩找规律,写出来了先不要激动放下这道题,先手玩几组特殊数据看看有没有漏判情况。输出了样例之后发现它就是密文的字母序+秘钥的字母序+1在%26\%26%26情况下的字母序(其实是没看懂题目那个表具体啥意思但是猜到了应该是某种字母序在%26\%26%26的情况下经

2020-11-01 20:41:06 48

原创 2020-10-31 NOIP模拟T1

题意已知一个二叉搜索树,求依次插入而形成这颗树的序列数量思路首先建树是显然的(dbq我一开始想了很久这树咋建)二叉搜索树与别的普通的树不同,发现每个节点的位置其实只与它的父节点(看从哪个角度看吧,也可以说是子节点)有关,所以每次建树只需要记录它的左儿子和右儿子然后按照二叉搜索树的性质来建树就可以把这棵树建完了。然后我们继续观察这棵树,发现对于这个已知的树,每棵子树(包括整棵树)的根节点是确定的,然而每棵子树(不包括整棵树)的根节点又与它自己的父节点相关,于是我们就可以联想到树形DPDPDP了。对

2020-11-01 14:34:23 84

原创 NOIP2014 解方程

解方程这道题用秦九韶算法就可以把原本n2n^2n2的算法优化到nnn次乘法与nnn次加法了(直接推的话只要有点文化课数学基础也是很好推的)这道题卡点并不在时间复杂度与算法,而是为了避免高精度要%\%%一个大质数比如1e9+71e9+71e9+7之类的。这题写成这样我们仍然只能获得30pts30pts30pts的好成绩 最丧心病狂的是这题在读入优化的时候也要记得取模!!!出题人你没有心记得取模就过了#include <bits/stdc++.h>#define int long long

2020-10-29 20:49:42 46

原创 [NOI2015]荷马史诗【哈夫曼编码】

[NOI2015]荷马史诗推荐一篇题解(感觉自己讲不清楚所以不如直接粘题解)观察之后发现这就是哈夫曼编码,于是按照编码方式构造即可。#include <bits/stdc++.h>#define ll long long#define int long long using namespace std;struct node{ ll w,h; node(){w=0,h=0;} node(ll w,ll h):w(w),h(h) {} bool operator <(

2020-10-29 15:37:37 60 1

原创 线段树分治学习笔记

参考博客1参考博客2核心思想&\&&适用范围遇到如下问题:有一些操作,每个操作只在 l∼rl \sim rl∼r 的时间段内有效。有一些询问,每个询问某一个时间点所有操作的贡献。解决:将操作离线后建立一棵在时间轴上的线段树,这样对于每个操作,就转化成了在线段树上进行区间操作。遍历整颗线段树,到达每个节点时执行相应的操作,然后继续向下递归,到达叶子节点时统计贡献,回溯时撤销操作即可。这样的思想被称为线段树分治,可以在低时间复杂度内解决一类在线算法并不优秀的问题。例

2020-10-29 14:01:57 161

原创 数的划分【DFS】

数的划分考虑不重复,所以升序记录每一次划分,注意到可以进行最优性剪枝,当sum+i∗(k−cur)>nsum+i*(k-cur)>nsum+i∗(k−cur)>n(因为枚举的数是递增的,枚举了当前数之后还要(k−cur)(k-cur)(k−cur)个比iii还大的数,如果在iii的时候已经不合法了后面也一定不合法)时,当前枚举的已经不合法了可以停止搜索了。因为当前值直接是在dfsdfsdfs状态里,所以回溯的时候不用对cur,sumcur,sumcur,sum的值进行操作。#incl

2020-10-29 09:05:24 125

原创 [BJOI2018]求和

[BJOI2018]求和先用倍增找出查询两点的LCALCALCA,如果LCALCALCA就是它们中的一个,那就直接在链上处理,注意whilewhilewhile它是怎么运行的,不要忘了加上最后LCA的贡献(做题的时候一定要想清楚再写,最好造几组特殊数据手玩)(要不是把题解扒了一篇下来对拍我估计还在WAWAWA)。如果LCALCALCA不是它们中的一个,那就分别拆成两条链来处理,也注意如何计算LCALCALCA的贡献。注意到kkk很小,直接暴力计算即可(然而我还非常智障的去问神仙有没有公式来算这个⋯\cdo

2020-10-29 08:39:31 52

原创 2020-10-28-NOIP模拟-Day1T2

T2(个人觉得比T1T1T1好理解一些,也可能是我cfcfcf打少了吧qwqqwqqwq)Solution\text{Solution}Solution一道将区间问题转换成图论的题。设000区间分别是[l,r],[L,R][l,r],[L,R][l,r],[L,R],那么要使000区间全变成111区间只能有这几种覆盖方法:[l,r]&[L,R] [l,L]&[r,R] [l,R]&[r,L][l,r]\&[L,R]\ [l,L]\&[r,R

2020-10-28 20:03:04 68

原创 2020-10-28-NOIP模拟-Day1T1

果然又是非常自闭的一天呜呜呜每次都很疑惑为什么自己想不出来正解还想的头痛,于是有了下面的对话那每次都加上点考试反思好啦!T1Solution\text{Solution}Solution注意到一个数轴上如果要满足所有的数字都能作为任意位置挂掉,那么它们在数轴上的顺序必然是1,3,5,7,9,...,(2i−1)1,3,5,7,9,...,(2i-1)1,3,5,7,9,...,(2i−1),(手玩一下,如果是2,4,6,8...2,4,6,8...2,4,6,8...则也可以挪动为1,3,5,

2020-10-28 19:43:48 43

原创 [TJOI2009]开关【线段树】

[TJOI2009]开关【线段树】重点在于pushdown\text{pushdown}pushdown操作,注意到如果原来已经有了开关一次的标记,那么再次标记这个区间时就相当于消除原来这个标记,否则对这个节点进行标记。#include <bits/stdc++.h>using namespace std;const int N=(int)1e5+50;int n,m;inline int read(){ int cnt=0,f=1;char c=getchar(); whil

2020-10-28 14:13:45 39

原创 [TJOI2018]数学计算

[TJOI2018]数学计算思路一:直接模拟(会因为爆long longlong\ longlong long的问题导致代码非常复杂)思路二:考虑线段树。建立一棵线段树,其叶子节点都是对应的乘数,每个非叶子节点的值为其左右儿子的值的乘积对mod\text{mod}mod 取模的值。这样,任意时候都有x=x=x=该线段树的根的值。操作111可以直接上,操作222可以看做是把第ttt次的乘数改为111。...

2020-10-28 13:09:55 47 1

原创 [CTSC1997]选课【背包类树形dp】

[CTSC1997]选课令

2020-10-28 13:07:18 79

原创 图论复习【Kruskal】

KruskalKruskalKruskal【算法思想】一种贪心算法,将边按权值排序,每次从剩下的边集里选择权值最小且两个端点不在统一集合的边加入生成树中,反复操作,直到加入了n−1n-1n−1条边。【算法步骤】将原图中边按权值从小到大快排。按照权值从小到大选边。若当前选取的边加入后使生成树TTT形成环,则舍弃当前边;否则标记当前边并计数。重复2.2.2.操作,直到生成树TTT中包含n−1n-1n−1条边。否则当遍历完所有的边之后仍然选取不到n−1n-1n−1条边表示MSTMSTMST不存在。

2020-10-02 16:32:24 58

原创 带修莫队

顾名思义,带有修改的莫队。莫队是一个离线算法,如果用强制在线的问题就不用考虑莫队了(可以树树树?)。如果用莫队算法求解,必须离线,先把查询操作和修改操作分别记录下来。记录查询操作的时候,增加一个变量,记录本次查询前做了多少次修改。加上时间轴的带修改莫队如果没有修改,就是基础莫队,一个查询的左右端点是[L,R][L, R][L,R]。加上修改之后,一个查询表示为(L,R,t)(L, R, t)(L,R,t),ttt表示在查询[L,R][L, R][L,R]前进行了ttt次修改操作。可以把t理解为“时间

2020-09-19 11:45:09 752

原创 普通莫队

莫队算法 = 离线 + 暴力 + 分块莫队算法的排序:把数组分块(分成n\sqrt nn​块),然后把查询的区间按左端点所在块的序号排序,如果左端点的块相同,再按右端点排序。这样可以使每个查询的点距离最短(具体用几何方法曼哈顿距离可以简单证明)注意:莫队算法针对的是离线处理询问区间,是一种用分块优化暴力使得最快处理所有询问区间的办法。例题:HH的项链这道题洛谷分块过不了,只能用树状数组才能过#include <bits/stdc++.h>using namespace std;co

2020-09-18 21:08:59 27

原创 教主的魔法 【分块】

教主的魔法分块模板题每一个M操作就是区间修改+暴力修改,每一个A操作就是区间查询,(A正解能用主席树,但是分析数据范围之后发现分块就够了)。分析之后发现M操作就是分块基本操作,直接按照整区间内的数直接整块修改,不是整区间内的数暴力修改(也就是分块最重要的思想)来操作即可。但是看到A操作发现直接查询时间复杂度会炸掉,于是考虑如何优化。发现如果区间内每个数都是有序的那么查询直接二分即可,则想到再引入一个数组b进行有序化原数组的操作,对于每一次修改,都对b进行一次更新加重新排序操作,然后直接在b数组上查询

2020-09-11 20:37:20 39

原创 HDU5821 Ball

HDU5821 Ball 【问题描述】 有 n 个盒子编号 1~n,第 i 个盒子里的球的颜色为 ai(如果 ai=0 则表示没有球)。 有 m 次操作,这 m 个操作依次进行,第 i 次操作有两个参数 li ,ri,表示你可以将区 间[li,ri]内的球全部取出后,再按你的意愿放回到区间[li,ri],同时保证一个盒子内每时 每刻最多只有一个球。 求是否存在一种方法,使得依次进行这 m 次操作后,第 i 个盒子里的球的颜色为 bi。显然,给每个球一个标号,由于是对于每个区间任意放球,那么必定有一

2020-09-06 19:40:57 53

原创 POJ2752 Seek the Name, Seek the Fame【KMP】

POJ2752 Seek the Name,Seek the FamePOJ2752\ Seek\ the\ Name, Seek\ the\ FamePOJ2752 Seek the Name,Seek the Fame【简要题意】给定一个字符串,从小到大输出sss中既是前缀又是后缀的子串长度【题解】KMPKMPKMP比较裸的题,考察对KMPKMPKMP里nxtnxtnxt数组的理解借用KMPKM

2020-08-01 15:50:21 37

原创 [NOI2001]食物链【并查集】

[NOI2001]食物链将同类,被吃,吃分为三个部分,每次新看到一组条件,就在根据题意先检查有没有已经矛盾的边,然后在不同的部分里对应连边维护,最后输出答案即可。重点是把不同的关系分为几个部分然后在这几个部分里做对应的操作,大大减小了代码和思维难度这种方法似乎还挺普遍的,看到有相互抑制关系的时候除了想拓扑排序也要想到分部分建立并查集求解。[来自洛谷题解评论区]通过建立333个数量为1−n1-n1−n的集合,分别表示AAA吃BBB,BBB吃CCC,CCC吃AAA,也就是说在不清楚xxx这个动物在哪一

2020-08-01 14:29:11 56

原创 [JSOI2008]星球大战 【反向建边】

传送门把摧毁改成修建然后反向用并查集判断是否联通这种反向建边思想还挺常见的#include <bits/stdc++.h>using namespace std;const int N=(int)2e5+60;const int inf=0x7fffffff;int n,m,k;struct node{int from,nxt,to;}edge[N];int tot,fir[N],b[N],fa[N],cnt=0,ans[N];bool broke[N];inline vo

2020-07-28 11:31:16 34

原创 拓扑排序-toposort

最近终于把这个坑填了⋯\cdots⋯什么是拓扑排序对一个有向无环图GGG进行拓扑排序,是将GGG中所有顶点排成一个线性序列,使得图中任意一对顶点uuu和vvv,若边(u,v)∈E(G)(u,v)∈E(G)(u,v)∈E(G),则uuu在线性序列中出现在vvv之前。拓扑排序的实现步骤在有向图中选一个没有前驱的顶点并且输出从图中删除所有和它有关的边)重复上述两步,直至所有顶点输出,或者当前图中不存在无前驱的顶点为止,后者代表我们的有向图是有环的,因此,也可以通过拓扑排序来判断一个图是否有环。

2020-07-25 14:54:49 203

原创 CF429B Working out

传送门SolSolSol:看题之后可以发现,就是在矩形内部找一个点,使得矩形的四个顶点到这里的值最大(最后值不包含这几个顶点的值)洛谷上的图 : )分别用dp1,dp2,dp3,dp4dp1,dp2,dp3,dp4dp1,dp2,dp3,dp4记录走到1,2,3,41,2,3,41,2,3,4的最大值,发现最后的最大值一定是A→CA \to CA→C横着走&&B→D\&\& B \to D&&B→D竖着走,或者A→CA \to CA→C竖着走&

2020-07-23 09:37:02 38

原创 Atcoder ABC 171 F

题意:给定一个字符串SSS,问插入kkk个字符后可以形成多少个不同的字符串,答案对109+710^9+7109+7取模SolSolSol:毕竟是ABC嘛,看完题解应该就懂了,主要说说咋想到的qwqqwqqwq首先观察样例所能得到的式子,发现对于oofoofoof插了五个字符,可以出现oofoo,oooof,ooofo⋯oofoo,oooof,ooofo \cdotsoofoo,oooof,ooofo⋯,那么会导致原串位置不唯一,这样我们就没法用普通插板法来做了,既然不可做的原因是因为位置不唯一,那

2020-07-23 08:27:40 151 1

原创 HDU5884 Sort【k叉哈夫曼树】

传送门【问题描述】小WWW有一个长度为nnn的非负整数数组aia_iai​和一个大于111的正整数kkk。你每次可以选不超过kkk个数,删掉这kkk个数然后往数组里加入这kkk个数的和,进行一次这样的操作的代价是这kkk个数的和。小WWW能很熟练的计算出合并成111个数需要的最小代价,现在他想问你,求最小的k使得合并成111个数的最小代价小于等于TTT。你输出的kkk要大于等于222。一开始并不知道这就是kkk叉哈夫曼树问题(概念百度),但是如果知道哈夫曼树的这就是一眼题了。自己yyyyyy

2020-07-22 16:09:29 62

原创 CF482A【简单模拟】

CF482ACF482ACF482A题意:构造一个n的排列,使将排列相邻两数相减取绝对值所得到的序列中刚好有k种值思路:最大最小值交替出现,构造完k种值后依次递增or递减构造即可一开始一直在想怎么贪心,以后做题要试着直接从本质入手CodeCodeCode...

2020-07-21 11:21:19 66

空空如也

空空如也

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

TA关注的人

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