自定义博客皮肤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)
  • 收藏
  • 关注

原创 [APIO2014]连珠线

题目链接分析首先考虑朴素算法。可以枚举每个节点作为根,这样的话连接的树的形态就确定了。应为我们可以知道每个点只可能是一个蓝边的中点,不难想到设一个DP状态表示节点是否为蓝边的中点,设 dp[i][0]dp[i][0]dp[i][0] 表示不是蓝边的中点, dp[i][1]dp[i][1]dp[i][1] 表示是蓝边的中点。因为每个蓝边的线段长都是两个线段,所以说对于一个是蓝边中点的节点,那么会想到是 son−>x−>fatherson->x->fatherson−>x−

2021-05-18 19:19:10 268 1

原创 圆方树

前言基础算法: Tarjan,双连通分量,树链剖分。导入给你一个 nnn 个节点 mmm 条边的仙人掌图,让你在线查询 uuu 到 vvv 的最短路径长度。其中 1≤n≤10001 \le n \le 10001≤n≤1000仙人掌图:任意一条边至多只出现在一条简单回路的无向连通图称为仙人掌。首先看到这道题,我们会自然想到Floyd以 O(n3)O(n^3)O(n3) 求解这道题,但数据范围 1≤n≤10001\le n \le 10001≤n≤1000 显然会TLE。又因为这个图是仙人掌图,每

2021-04-17 08:39:07 246

原创 珂朵莉树(ODT)

引入珂朵莉树,又叫Old Driver Tree(简称ODT),是由一位ID名为Old Dirver的大佬受CF896C的启发所创造出来的一种平均时间复杂度较为低的骗分数据结构。注意是骗分,在数据随机的情况下还是比较优秀,但会被毒瘤出题人精心设计的数据所卡死。CF896C题目大意:请你写一种奇怪的数据结构,支持:111 lll rrr xxx:将[l,r][l,r][l,r]区间所有数加上xxx222 lll rrr xxx:将[l,r][l,r][l,r]区间所有数改成xxx333 lll

2021-03-21 15:43:12 485

原创 题解 CF995E Number Clicker

分析首先拿道题,操作复杂,而且用 dpdpdp 并不好推出状态与路径。再看一看时间限制,第一反应就是搜索。但是搜索的冗余状态十分的多,而且也会T,于是我们就得想出优化。对于操作 111 与操作 222 ,十分简单,一个是加一,一个是减一,我们很容易知道操作是互逆的,有了这个明显的提示,就想到用双向 bfsbfsbfs 去优化。但是操作三并不容易想出怎么可逆,如果学过逆元,我们就能知道 up−2u^{p-2}up−2 一定是 ppp 的一个逆元,又因为你愿是唯一对应的,所以说 up−2u^{p-2}up−

2021-03-09 21:43:12 180

原创 墨墨的等式

题目描述分析40pts一道很巧妙的题目,果然不愧是往届集训队的题目,在网上看了一下,似乎是一道同余最短路(雾)。首先看到题目,可能会以为很难的数论,根本看不出来是一道最短路。分析一下题目,首先可以想到一个暴力做法,直接完全背包。可以推出方程:f[j]=f[j]∣f[j−a[i]]f[j]=f[j] | f[j - a[i]]f[j]=f[j]∣f[j−a[i]]这是一个只能得40pts40pts40pts的做法,这里就不再赘述。100pts进入正题。我们需要更优的算法,于是我们开始解剖这个式

2021-01-22 21:15:10 128

原创 CF909C python Indentation

前言这次模拟赛出的好bt,这道题被出成T1,只有一个人A了,而我却被卡到了80pts80pts80pts。分析看一眼题目与数据范围,搜索时间一定炸,显然是一道DpDpDp。设dp[i][j]dp[i][j]dp[i][j]为以iii结尾,前面有jjj个空格的总方案数。我们可以分为两种情况:1.s[i-1]=‘f’这种情况比较简单,因为有一个限制是每一个fff下面必须不为空,所以说当前这个的位置必须是在上一个字符的下一层,也就是下一个包含在上一个中,for example:f x x

2020-12-29 16:45:27 1972 7

原创 NOIP2020 字符串匹配

题目描述考场做法48pts48pts48pts的n2n^2n2暴力+8pts8pts8pts的特殊性质48pts先暴力枚举每一个串,找A,C两串以及A,C两串的奇数次出现字符的个数,然后一个一个判断,时间复杂度O(n3)O(n^3)O(n3),慢的裂开。开始想优化,因为A的起始点一定是1,C的终点一定是n,可以从前向后,从后向前预处理每一个串奇数个数字符的个数,用n2n^2n2的时间复杂度预处理(AB)与C每种长度的情况可以为答案增加的个数,在进行操作是可以直接调用,而不用一个一个的处理。时间算法复

2020-12-09 14:14:11 786

原创 NOIP2020游记+题解

前言初中以来第一次站在NOIP考场上,心态不是太好,考试也炸的开花。不过还没有退役,再接再厉吧。。。day -x(-10<x<-2)半期考炸了,被制裁了,本想着就过了,NOIP好好备战,可是常规课老师还在"誓死捍卫语文的尊严"(炸开flag*1)。day -1和考CSP时一个样,入住了LJNK旁边的一个酒店,备战NOIP,老师布置了一些奇奇怪怪的题目,一道都不会(炸开flag*2),然后就早早的睡了。day 18:30开始考试,带了两片巧克力进考场,但似乎不够吃。。。...

2020-12-09 13:30:07 713 2

原创 [HEOI2015]定价 题解

题目分析这道题其实很简单,首先我们很容易知道最后一位非零时数字长度小的他的荒谬值小,然后再考虑最后一位会不会为5,能为5的优先选五。然后可以分为两种情况:1.形如“5030 8090” r - l大于10^(L的位数 - 1),那长度a肯定是1,这时再先判断非零位为5的是不是在[L~R]这个范围,如果不是再从小到大一个一个的枚举,因为只用改变首位,所以最多只会跑十次。2.形如“969 1008” r - l小于10^(L的位数 - 1),那长度a肯定大于1,这是我们把R - L的位数求出来,设nu

2020-12-04 13:48:01 302

原创 线段树总结+模板+例题

概念线段树(Segment Tree)是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。与按照二进制位(2的次幂)进行区间划分的树状数组相比,线段树是一种更加通用的结构:1、线段树的每个节点都代表一个区间。2、线段树具有唯一根节点,代表的区间是整个统计范围,如[1,N]。3、线段树的每个叶节点都代表一个长度为1的元区间[x,x]。4、对于每个节点[l,r],它的左子节点是[l ,mid],右子节点[mid+1,r],其中mid=(l+r)/2(向下取整)。线段树结构:图中展示了一棵线

2020-11-21 14:20:24 240 1

原创 CSP-2020游记+总结

Day -10~-2疯狂刷题,疯狂打水题(泼冷水)大赛。Day -1考试前一天,晚上没竞赛课,和几个大佬一起入住了考场边的酒店。一直打模板:dijkstra,SPFA,LCA,素数筛…但好像一个也没考~~~Day 0pj组早上很早就起了床,也没干什么事,坐车进入了LJNK,环境真好(比HF大几倍)。早上大雾(考场大雾flag*1)。八点钟左右进入了考场,结果发现身份证放书包里了,和监考老师一起去考场外去证件(考场大雾flag*2)打开题目,T1感觉比以往T1稍微难一些,不过还是快速过掉了。

2020-11-13 19:51:17 304

原创 洛谷 P5144 蜈蚣

题目描述分析首先我们得知道什么是异或,这道题的核心就在于看到异或进行转移。异或xor,^,A xor B就是再A,B两个数的二进制数中相同为0,不同为1。一些定理:0xorA=A;0 xor A = A;0xorA=A;AxorA=0;A xor A = 0;AxorA=0;Axor(BxorC)=(AxorB)xorC;A xor (B xor C) = (A xor B) xor C;Axor(BxorC)=(AxorB)xorC;因为这道题是的蜈蚣是一节一节的,并且是要求蜈蚣分为m段再异或后

2020-10-07 19:57:57 181

原创 [HNOI2006]公路修建问题 题解+代码

[HNOI2006]公路修建问题期望20,实际10没想到,居然在我的骗分代码上删了两个if后就A了,神奇?!!题目描述分析其实就是一个两次生成树,我考场上可能有一点问题居然想了kruskal+DP让后再想到了有限制的生成树等各种奇特的算法。因为看到必须要有k条生成树的边中是第一类,并且c1>=c2,所以直接先对c1进行排序,然后再对他求半棵生成树,一棵有k条边的生成树,然后再构成剩下n-k-1条边的半棵生成树,注意,此时的排序应该是c2的权值进行排序,应为此时构成的边是c2权值。让后就直接在

2020-10-07 15:47:48 254

原创 [JLOI2011]飞行路线 题解

T3 [JLOI2011]飞行路线期望100,实际60我打dijkstra的时候傻了,dijkstra板子都背错了,我的vis呢?不见了!然后,考试结束,原地爆炸!!!题目描述分析本来是很简单的一道分层图最短路,看到有可以将价值变为0的东西,于是就分一下层,利用一下DP的思想。设dis[i][k]表示当前走到第i个点,用了k个能将权值变为0的“门票”,然后就用这个点来修改与它连过边的点,分成两种情况,用"门票"或者是不用"门票",当用的"门票"大于了k,也就是将"门票"用光了时,第一种情况就跳过,

2020-10-07 15:46:21 180

原创 Teamwork G 题解

Teamwork G理想分数100,实际分数100题目描述自认为是一道很简单的DP题目,考场上花了3min看题,5min想DP状态转移方程式,5min打出,0s过样例,5min构数据查错,一共二十分钟就过了这道题。感觉比第1题还水。分析一道很水的线性动态规划,设dp[i]表示前i个人最多能得到的技能水平之和,他对dp[min(i + k,n)]这个之前的有影响,而后面的又由后面k(j<=n)个的最大值得到,于是他就可以得到一个十分简单的状态转移方程f[j]=max(f[j],f[i]+sum

2020-10-07 15:45:22 157

原创 数列问题 题解

数列问题理想分数100,实际分数100题目描述思路:首先看到都是输入一个数,输出一个数,让后再看到这个数据范围:1<=t<=1e4,1<=n<=1e9,这数据范围,O(tn),O(n+t),的算法都否认了,并且如果用数组来存储,一定会炸。于是就想到了推一下规律。我先打了一个dfs,将1-30的答案都搜了一遍,发现一个神奇的规律,每两组就加一个数,每一组数字就加一。如下:f[1]=0,f[2]=1,f[3]=2,f[4]=2,f[5]=3,f[6]=3,f[7]=4,f[8]=

2020-10-07 15:44:16 259

原创 10.7考试题解

前言这次考试比较恶心,三道蓝题,一道不知难度的题,不过最后还是考了270,Rank5,运气有方面的好,有的方面坏。出的题都是我擅长的算法T1规律题,T2一道简单DP,T3一道分层图最短路,T4是一道比较难想但代码却很简单的玄学生成树题目。但代码中却出现了一些小错误,T3的dijkstra居然爆了,他T了,我打了一个假的dijkstra。T4脑壳发抽多加了两个if。算法&难度T1:推规律 难度:没有,应该是道绿的左右吧。T2:线性DP题 难度:蓝题(应该是评错了吧,绿题做有难度)T3:分层图

2020-10-07 15:41:21 240 2

原创 树形DP总结

概念给定一棵有N个节点的树(通常是无根树,也就是有N-1条无向边),我们可以任选一个节点为根节点,从而定义出每个节点的深度和每棵子树的根。一般就以节点从深到浅(子树从小到大)的顺序作为DP的“阶段”。DP的状态表示中,第一维通常是节点编号(代表以该节点为根的子树)。大多数时候,我们采用递归的方式实现树形动态规划。对于每个节点,先递归在它的每个子节点上进行DP,在回溯时,从子节点向父节点进行状态转移。作用最大独立子集对于一个树形结构,所有的孩子和他们的父亲存在排斥(选了孩子就不能选父亲,泛指同理),

2020-10-04 14:11:11 323 1

原创 Deliver the Cake[最短路]

题目描述今天是张三的生日,于是,张三去买了一个生日蛋糕,现在该取回家了。这里一共有n个村庄,每个村庄编号记为1、2、3、……、n,在这n个村庄中,共有m条双向道路,连接ai和bi村,长度为di米。面包店在s村,张三的家在t村,所以,张三需要把蛋糕从s村带到t村。她可以用自己的左手拿蛋糕,也可以用右手,也可以在路途中交换拿蛋糕的手,但这需要花费她x秒的时间(当她交换拿蛋糕的手时,只能站在原地)。在任何地方,任何时间,她都可以交换拿蛋糕的手,她也可以随心所欲地交换很多次,也可以不交换。但是,这n个村庄中

2020-08-22 15:47:57 236 1

原创 「SCOI2012」滑雪与时间胶囊(kruskal)

题目描述a180285 非常喜欢滑雪。他来到一座雪山,这里分布着 m 条供滑行的轨道和 n 个轨道之间的交点(同时也是景点),而且每个景点都有一编号 i (1≤i≤n) 和一高度 h。a180285 能从景点 i 滑到景点 j 当且仅当存在一条 i 和 j 之间的边,且 i 的高度不小于 j。与其他滑雪爱好者不同,a180285 喜欢用最短的滑行路径去访问尽量多的景点。如果仅仅访问一条路径上的景点,他会觉得数量太少。于是 a180285 拿出了他随身携带的时间胶囊。这是一种很神奇的药物,吃下之后可以立

2020-08-13 21:58:22 531 3

原创 最小生成树 学习笔记(prim + kruskal)

概念生成树:一个连通图含有全部nnn个顶点,但只有足以构成一棵树的n−1n-1n−1条边。一颗n个顶点的生成树有且仅有n−1n-1n−1条边,如果生成树当中再添加一条边,必定成环。最小生成树(MSTMSTMST):在联通网中的所有生成树中,所有边代价最小的生成树,成为最小生成树。prim原理:从起点顶点开始,选择当前可用的最小权值和,把对应的顶点加入到当前建立的生成树当中。令初始状态为uuu,所有顶点结合为VVV,当前剩余没用的顶点集合为vvv。1.初始化:u=s,v=V−uu={s},v=V-

2020-08-13 20:41:39 145

原创 线性筛/埃氏筛

素数定义素数,即质数,指在大于111的自然数中,除了111和它本身以外不再有其他因数的自然数。判断质数试除法:判断是否能被其他222~√n√n√n的数整除,时间复杂度为O(√n)O(√n)O(√n)代码:for(int i=2;i*i<=n;i++)if(n%i==0)return false;return true;筛质数埃氏筛简介埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根

2020-08-10 21:59:12 149

原创 最短路(Floyd,dijkstra)

FloydFloyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。Floyd是最简单的最短路径算法,可以计算图中任意两点间的最短路径。时间复杂度为N的3次方,适用于出现负边权的情况。for(int k = 1;k <= n;k ++)for(int i = 1;i <= n;i ++)for(int j = 1;j <

2020-07-29 22:18:47 159

原创 树状数组各种模板

因为时间不够了,所以——写一下模板操作lowbitint lowbit(int x) { return x & (-x);}Updatevoid Update(int x,int y) { for(;x <= n;x += lowbit(x)) Bit[x] += y;}Askint Ask(int x) { int ans = 0; for(;x;x -= lowbit(x)) ans += Bit[x]; return ans;}模板题目单点修改

2020-07-27 22:15:17 161

原创 作业调度方案(jsp.cpp)

题目描述我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。例如,当n=3,m=2时,“1-1,1-2,2-1,3-1,3-2,2-2”就是一个给定的安排顺序,即先安排第1个工件的第1个工序,再安排第

2020-07-25 18:23:05 371

原创 火柴棒等式(matches.cpp)

题目描述给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:注意:1.加号与等号各自需要两根火柴棍2.如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)3.n根火柴棍必须全部用上输入格式样例#1输入14样例#1输出2样例#2输入18样例#2输出9数据范围与提示【输入输出样例1解释】2个等式为0+1=1和1+0=1。【输入输出样例2解

2020-07-25 14:47:34 469

原创 字符串的展开(expand.cpp)

炸了炸了,模拟赛又炸了,180分,要原地退役了。首先是第一道题,也是我唯一做对的题。题目描述在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:(1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减

2020-07-25 12:25:45 528

原创 STL学习笔记(优先队列priority_queue)

优先队列priority_queue概念priority_queue翻译为优先队列,其底层是用堆来实现的。在优先队列中,任何时刻,队首元素一定是当前队列中优先级最高的那一个。头文件#include及using namespace std;。定义priority_queue<type_name> name;type_name也可为任何数据类型注意事项和queue不一样的是,priority_queue没有front()和back(),而只能通过top()或pop()访问队首元素(

2020-07-21 21:51:41 173

原创 STL学习笔记(变长数组vector)

1.变长数组vector概念vector译为向量,一般来说也叫变长数组,也就是长度可以任意变化的数组,有些题目需要开很多数组,往往造成内存超限,使用vector简单方便,还可节省空间。头文件头文件,需要用using namespace std;。定义方式vector<type_name> name;其中type_name可以是任何数据类型,如int,double,char,string,结构体,vector等例:vector<int> a;

2020-07-21 21:28:22 257

原创 Coloring Brackets[DP]

题目描述Petya遇到了一个关于括号序列的问题: 给定一个字符串S,它代表着正确的括号序列,即(“(”)与 (“)”)是匹配的。例如:“(())()” 和 “()”是正确的,“)()”与“(()”则不是正确的。 在正确的括号序列中,一个左边的括号一定是匹配一个右边的括号(反之亦然)。例如,在下图中,第 3 个括号匹配第 6 个括号,第 4 个括号匹配第 5 个括号。现在你需要对一个正确的括号序列做涂色操作,严格满足以下三个条件:1、每个括号要么不涂色,要么涂红色,要么涂蓝色。2、一对匹配的括号需要

2020-07-19 22:00:07 207

原创 分离与合体[DP+DFS]

题目描述经过在机房里数日的切磁,LYD从社神牛那里学会了分离与合体,出关前,杜神牛给了他一个测试杜神牛造了个区域,它们紧邻着排成了一行,编号1-n。在这經个区域里都放着一把OI界的金钥匙,每一把都有一定的价值,LYD当然想得到它们了。然而杜神牛规定LYD不可以一下子把它们全部拿走,而是每次只可以拿一把。为了尽快地拿到所有的金钥匙,LYD自然就用上了刚学的分离与合体特技。开始LYD可以选择从1~n-1的任何一个区域(记为K)进入,进入后LYD会在K区域发生分离,从而分离为两个小LYD。分离完成的同

2020-07-19 20:47:40 196

原创 [NOIP 2004] 虫食算 (深搜+剪枝)

题目描述所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子: 43#9865#045+ 8468#6633 44445509678其中 # 号代表被虫子啃掉的数字。根据算式,我们很容易判断:第一行的两个数字分别是 5 和 3,第二行的数字是 5。现在,我们对问题做两个限制:首先,我们只考虑加法的虫食算。这里的加法是 n 进制加法,算式中三个数都有 n 位,允许有前导的 0。其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的

2020-07-10 16:22:54 710

原创 区间DP学习笔记

基本概念:区间DP是什么?正如其名,是以区间长度为阶段的一种DP。这类DP的解法较为固定,先枚举区间长度,再枚举左端点,之后枚举断点,分为左右两部分进行求解,总的来说,可以转移出这样一个模板状态转移方程dp[i][j] = min(dp[i][k] + dp[i + 1][k] + 决策),决策根据题目要求所答。光知道到基本概念还不行,讲完了简单的基本概念,来两道简单的例题过过手。例题1:石子合并题目传送门分析:本题是区间DP最经典的一道模板题,几乎是区间DP的模板,但很容易误解成贪心,样例也制造了

2020-06-22 20:46:49 231 2

原创 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

题目传送门前言:本题用深搜或者广搜都可以,而且算是比较水的一道题,luogu绿标,蒟蒻在这里分享一种深搜的做法。分析:本题主要是求连通块。对于路的处理,可以用一个四维的bool数组road[u1][v1][u2][v2]来保存是否有路,其中u1,u2表示有路联通的两个小区域的横坐标,v1,v2表示这两个小区域的纵坐标,注意:因为是无向图,所以road[u1][v1][u2][v2] = road[u2][v2][u1][v1]。保存好路的位置之后就可以用深搜去暴力搜索连通块了,当判断两个相邻区域,x1,

2020-06-20 20:32:55 218

原创 [JOISC2014]挂饰

[JOISC2014]挂饰难度:提高+/省选-分类:动态规划,01背包,贪心,剪枝分析:初看这道动态规划题,可以看出是一道01背包题,但这道题不同于其他01背包的地方在于挂钩的问题,其挂钩数量如果少于后面挂饰挂钩的数量,便会多次挂上却没有意义,于是我们可以设置一个结构体,将结构体按照挂钩数量从大到小排序,保证先算挂钩数量多的,让后按照01背包模板打上去就可以了,但要注意下表小于0的情况,就把这个挂件扔到手机上就行了,于是可得转移方程:dp[i][j] = max(dp[i - 1][j],dp[i

2020-06-19 21:22:21 245

空空如也

空空如也

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

TA关注的人

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