自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

It's the Climb

Ain't no mountain high enough

  • 博客(43)
  • 收藏
  • 关注

原创 SUMMARY

① 将一个十进制的数转化成base进制的数(想原理) while(val) { t[count++] = val % base; //val中有多少个base。(因为形式中每个数必须<进制数base,所以取余) val /= base; //循环n次,则此行得到val中有多少个base的n次方。 ...

2018-05-24 20:24:46 258

原创 算法模板代码整合

【并查集】int father[5010]; int get(int a) { if(father[a]==a) return a; else return father[a]=get(father[a]); } void add(int a,int b) { a=get(a); b=...

2018-05-24 20:24:34 373

转载 【蓝桥杯国赛真题dfs】机器人塔

解答思路: 我们可以发现只需要确定最底层的情况,就可以依次向上推出每一层的情况,因此解决方法是:先用dfs列举出最底层的情况,然后向上递推判断这种情况是否满足,满足则答案加1。向上递推可以使用dp进行优化,从而加快速度。知识点: dfs搜索、递推、dp(动态规划)C++代码:#include <iostream>using namespace std;int M, N, H;i...

2018-05-23 21:04:04 789

原创 【真题-字符串转数字的处理】密文搜索

首先我想在这里吐槽一下,还有三天左右比赛,自己竟然状态出现了点问题...拿到真题就觉得心塞然后莫名其妙地浮躁。必须调整状态!!!!!明天要开始复习笔记了,希望不负己望!大致思路:方法很巧妙,我刚开始想到的就是KMP算法去匹配字符串的裸题,但是发现还有个“全排列”的条件,如果n很多的话,我全排列的答案就很多了还得一个个去匹配,感觉就容易TLE。然而,这里的方法很奇妙:把字符串转化成数字——一个字符串...

2018-05-22 22:07:08 227

原创 【dfs+dp+桶排序去重】洛谷P1441 砝码称重

大致思路:首先看一下这道题:https://blog.csdn.net/m0_38033475/article/details/80380467你对比一下会发现,都是求“方案数”的,其实都是用“01背包”来做的:对本题来说,f[j]的值表示重量为j时的方案数(每个方案的重量和要不一样)。但是你会发现其实两题是不一样的,是在于题意不同,本题求的不是单纯的“方案数”,而是不同的重量和有多少种,然而,显...

2018-05-21 23:13:07 415

原创 【dfs】小木棍的长度

大致思路:我傻了,我竟然在纠结“咦我咋知道它们应该要拼的长度(即递归临界条件)是啥呀?”你竟然还在纠结??不就是遍历解决的事情吗。。。。。。有时候还是要往暴力去想。然后就是常规的dfs,真的思想很常规,就是访问了之后在当前基础去递归,不行的话就再回来当作什么也没发生过继续遍历进入下一个选择。主要难在一些剪枝(避免超时呀)的设计上。觉得这道题剪枝的设计比较有趣的地方在于,由于“每个木棒都必须要使用到...

2018-05-21 18:28:01 670

原创 【dp】相似基因

大致思路:dfs也写了dp也写了然后发现题读错了。。。。所以比赛的时候一定要先把题多读两遍每个句子都给它读懂!!!!这里两个字符串都可以加入空碱基!这道题用dp做,难点在哪里呢?我认为难点在于dp的含义设定:含义中那个“不计算空碱基”的设定真的是绝了,不然真的,写不出状态转移方程出来的(鬼知道能加多少个空碱基)这个状态转移很类似于两个字符串求公共子序列。真的%%%%%%。希望比赛的时候我能有点这种...

2018-05-20 19:31:31 607

原创 【dp 重要*】尼克的任务

大致思路:刚开始我就是觉得好难啊,我觉得蓝桥杯的大题可能就这个差不多了!但是我真的没想出来,我还想是不是要用啥子拓扑排序哦,他确实是很“线性”的,但是拓扑排序只是指明“先后关系”,你这儿弄么复杂多样的先后关系真的不好建图的。咋法用“线性dp”做嘛?其实,别忽略了:背包问题也是线性dp。而这道题,是有点背包问题的感觉的——做不做这个任务,要求的是最大空暇时间。这里就要对这种问题再增强一些理解了:首先...

2018-05-20 16:21:35 746 1

原创 【最长上升和下降子序列】导弹拦截

大致思路:主要是思路问题 我本来以为用dp 想半天也没想出来 最后一看题解 其实就是最长上升(也可以用dp做,只是我有现成方法)和下降子序列来做最简单po一个题解然后我就写了个求最长下降和最长上升子序列的代码,洛谷上是unknown error,我在本地运行是正确的。代码:#include<iostream>#include<bits/stdc++.h>using na...

2018-05-20 14:52:10 233

原创 【dp】洛谷P1064 金明的预算方案

大致思路:以下Po一个高中生写的题解。。其中让我有个点恍然大悟,原来“dp[j-w[i]]+v[i]”就是“买这个东西”的意思!以前都没咋理解直接写的.....带有附件的背包问题,它属于01背包的变式。这题还好,每一个物品最多只有两个附件,那么我们在对主件进行背包的时候,决策就不再是两个了,而是五个。还记得01背包的决策是什么吗?1.不选,然后去考虑下一个2.选,背包容量减掉那个重量,总值加上那个...

2018-05-20 13:56:28 200

原创 【dp】洛谷P1164 小A点菜

大致思路:太久没做dp竟然有点懵逼了。。。其实,诶,就正如你所想的,应该思考dp数组代表的是什么含义!根据题意,应该表示“方案数”比较好吧,那dp[i]的下标i呢?就代表使用了的价钱吧。那么状态转移方程: dp[j]+=dp[j-v[i]];意思就是你使用当前花费的方案数+=你如果不买此菜的方案数。(因为你要不买,要不就不买)注意,如果你把dp数组换了含义,比如说像这里换成“方案数”了,那你需要再...

2018-05-20 10:50:43 423

原创 【线段树-区间更新】知识点讲解 + 模板题

知识点讲解:博文(https://www.cnblogs.com/TheRoadToTheGold/p/6254255.html)讲得很通俗易懂,copy一下:5、区间修改,即修改一段连续区间的值,我们已给区间[a,b]的每个数都加x为例讲解    Ⅰ.引子        有人可能就想到了:       修改的时候只修改对查询有用的点。       对,这就是区间修改的关键思路。      为了实...

2018-05-19 20:44:57 1225

原创 【线段树 应用】公告牌

大致思路:刚开始一看完题,粗口都要爆出来了,这应该用贪心还是什么dp来做的吧!但是定睛一看,数据量着实很大,其实dp是不能handle的。所以,这道题用线段树来做,才是满分。那么怎么用线段树来做呢?要联系到线段树,先想想我的数组序列要是什么含义的(每一行已放置的木板宽度?剩余的木板宽度?(这俩一样的..)),想想线段树s数组来存个区间的啥值(和?最值?)。然后再将题意联系到两个点——单点更新和区间...

2018-05-19 19:33:51 196

原创 【线段树】知识点讲解

概念:注意:s数组要开题目原数组的4倍大小。s[p]这个点它代表着数组下标为l~r的元素的和或者最大最小值,这个l和r与数组结构无关,是人为定义构想的。方法模板:【对于s数组存储“区间和”时】一、单点更新(初始化s数组)1.单点加减更新void modify(int p, int l, int r, int x, int v){ s[p] += v; if (l == r) ...

2018-05-19 19:18:25 290

转载 C++ string类中的用法总结

要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件using  std::string;using  std::wstring;或using namespace std;下面你就可以使用string/wstring了,它们两分别对应着char和wcha...

2018-05-19 13:40:25 245

原创 【树状数组维护区间最值】知识点讲解+例题x1

例题:大致思路:模板题。模板为什么要用a数组其实不是特别清楚,但是这种适用范围小的提醒确实记住模板即可。AC代码:#include<iostream>#include<bits/stdc++.h>using namespace std;const int maxn=1e6;int c[maxn];int a[maxn];int D;int cnt=0; //记...

2018-05-19 13:35:57 599

原创 【树状数组】奇怪的报数游戏

大致思路:一看,序列,数据很大,暴力可能就是去遍历,题中还有“前面有多少”的字眼,感觉就是用树状数组做。正向分析感觉有点困难,我们反向来想,如果是序列的最后一个人,他前面有a人的编号比自己小,而他前面就是除他之外的所有人,所以他的编号应该就是a+1. 那么倒数第二个人呢?他前面的人是除他 而且除去最后一个人之外的所有人,所以不仅考虑前面还要考虑后面!我现在知道的信息是:编号应该是所有比他编号小的人...

2018-05-19 11:13:00 772

原创 【二维树状数组】POJ2155 矩阵操作

之前是学会了用二维树状数组进行单点更新、区间查询、子矩阵查询,但是如果想要“子矩阵更新”、“单点查询”呢?是不是很奇葩,其实后者都可以由前面所学的“转化”而成。大致思路:搞懂它我还是想了很多看了很多的0.0首先我们换道题:如果只是在一维数组上操作的话,是不是只需要在左端点+1,右端点-1,即区间更新->单点更新了。查询单点x的时候只需要把1~x的值求和,就知道被更新的次数了,即单点查询-&g...

2018-05-16 21:34:45 254

原创 【二维树状数组】知识点讲解+例题x1

概念概念的话感觉就不是很好理解,但是满足树状数组的功能特性:对数组进行简化(因为C数组的辅助),使得之后优化遍历的时间复杂度到log。因此,二维树状数组其实也就这个用,只是之前是针对一维,现在是针对二维。百度百科这样写的,其实看不看懂问题不大:模板主要是要记住下面的方法!单点更新 和 区间查询。其实A数组要不要都无所谓,因为C数组的更新其实就代表了A数组的更新。看题意。区间查询操作一般是为了用于“...

2018-05-16 21:01:07 757

原创 【树状数组 求逆序对】排序

首先需要了解逆序对是什么:逆序对就是如果i > j && a[i] < a[j],这两个就算一对逆序对。其实也就是对于每个数而言,找找排在其前面有多少个比自己大的数。那么思路就来了,树状数组又一次地优化了这种“需要遍历”的情况。那不就很容易了吗?依次把序列里的数放到树状数组中的A[i]上去(实际是以C[i]形式的插入函数),注意A[i]是以数值大小从小到大排列的。先插入...

2018-05-15 22:28:25 17576 5

原创 【树状数组】木桩涂涂看

大致思路:可以转化成“看这个点被多少个区间所重叠”的问题。刚开始的想法是用暴力什么的,当然是还有最优的办法,但说实话,想半天没想到用树状数组怎么做。后来渐渐明白:“一个序列排了很多个点”,题目和“区间”有关——由此联想到树状数组但是这里的问题在于“单点更新”上,难道输入的区间内的每一个单点都去更新一下?这样区间长度一大之后复杂度不也是很高吗?这还不如暴力呢画了个图就明白了:纵观这个序列,对于红点来...

2018-05-15 13:32:46 307 1

原创 【树状数组】知识点讲解+例题x1

以下讲解很有用,via:https://www.cnblogs.com/hsd-/p/6139376.html【区间查询】ok 下面利用C[i]数组,求A数组中前i项的和 举个例子 i=7;sum[7]=A[1]+A[2]+A[3]+A[4]+A[5]+A[6]+A[7] ;   前i项和C[4]=A[1]+A[2]+A[3]+A[4];   C[6]=A[5]+A[6];   C[7]=A[7]...

2018-05-15 10:46:44 142

原创 【字典树】新年礼物

大致思路:先理解这道题:子序列是说把这几个符合要求字符串排成队,看这条队有多少个字符串。之前我的思路就是:用字典树边插入的时候边找,找到前缀相同的我就看看你是不是同时前缀也是后缀(用了遍历比较)。然后数据量一大,又是二维数组,还是内存超限了。后来看了答案,发现问题主要是出在优化方式上:    ①采用链表代替数组。字典树中的一个节点由结构体Node来代替,用指针的形式来达到之前用数组“转移到子节点”...

2018-05-14 22:50:28 172

原创 【字典树】知识点讲解 模板+例题x1

这里的讲解超级棒!!必戳!:https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html其中最重要的是字典树数组写法:s[i][j]=k,表示编号为i的节点的第j个孩子是编号为k的节点我的理解就是觉得,如果字符串的数量一大起来,题意是关于查询“相同前缀”的,那么就用字典树了!!!模板:更多模板请见链接。例题:糟糕的Bug大致思路:找相同前缀的字符串...

2018-05-14 21:42:44 146

原创 【扩展kmp+优先队列(结构体)排序】匹配格式

大致思路:耶这道我自己比较顺利地做出来了。为什么联想到要用拓展kmp呢?其实你看看,首先是有“头尾匹配”的,只不过花样多了点。这道题我是通过getnext()先把所有next值得到。需要注意“不重复”的题意要求,所以自己由此加了些限制条件:nextt[i]+1<=i //中间部分与头不重复n-q.top().len+1>q.top().i+q.top().len-1 //...

2018-05-13 16:05:45 197

原创 【拓展KMP+最小循环节】旋转数字

大致思路:这道题也是肝了很久的一道题。。之前打死也没想通为啥可以用拓展kmp做,怎么是首尾比较法?后来直接写个例子就知道了。。。。方法是这样的,比如说t=12312312312,那么我就把t重复一遍得到s:1231231231212312312312。惊奇的发现从s的任一位开始数n位,也就是t旋转所得的一种结果。那么,当然extend[1]=n,后面的话,如果extend值为0说明第一位就不一样,...

2018-05-13 11:50:44 502

原创 【拓展KMP】首尾相接

大致思路:很明显的“首尾比较”的题,就是拓展KMP的模板题了。这里把getnext()和getextend()套上去,注意输入从1开始。模板题解决。AC代码:#include<iostream>#include<bits/stdc++.h>using namespace std;char t[50010],s[50010]; //t是匹配前面的,s是匹配后面的 in...

2018-05-12 17:31:01 286

原创 【博弈论】SG函数应用总结

这两天用比较少的学习时间(真的,自己不能再懒了,马上要国赛了!!!)学习了博弈论,其中主要是对于SG函数的应用,是解题的关键。这里用自己的语言算是对SG做一个小结吧。小结来源:这两天写的几篇博弈论博文初识SG——Nim堆游戏:尼姆堆游戏(两人轮流从任一堆里拿任意数量,最后没东西可拿者输)中神奇的结论:”若每一堆数量的异或和==0,则先手必输”让我觉得很奇妙,也不知道为什么会有这样的结论产生。但是在...

2018-05-12 16:55:33 444

原创 【博弈SG】蒜头君的新游戏

大致思路:其实这之前(https://blog.csdn.net/m0_38033475/article/details/80281556)差不多,也是列写sg值对于不同情况时是多少,之前只觉得c==s则sg==0,但忘了考虑若c==t-1,则sg也为0!我的错因就是在于没有牢牢结合题意操作!因为如果你是t-1了,你按照题意的后续操作最多也就s-1(但好像(t-1)*(t-1)+t到不了s-1),...

2018-05-12 16:53:32 263

原创 【拓展KMP算法】知识点讲解+模板

void getnext() { next[1] = n; int p = 1; while(p < n && t[p] == t[p + 1]) p++; next[2] = p-1; int k = 2,l; for(int i = 3; i <= n; i++) { p = k + next[k] -...

2018-05-11 17:36:16 317

原创 【KMP算法】知识点讲解+模板

老生常谈的算法了...记得也是前前后后看了好多次,但是不久后就又忘记next数组的含义。这次我觉得终于能一句话看懂了,不需要我再像以前看图解一样把自己绕晕:模板(带我自己写的注释):void getnext() { next[1] = 0; //这里默认字符串都从下标1开始哈! for(int i = 2; i <= n; i++) { //i从...

2018-05-11 15:17:00 242

原创 【博弈SG函数应用】洛谷P1290

题解via lowww666 博弈题看到这题就想到了SG函数那么可以考虑最终情况:一个数是x,另一个是0,那么先手必败(因为上一个人已经得到0了,其实游戏已经结束了)剩下的情况:一个数n, 一个数m,假设n>m那么根据题意,SG(n,m)=mex{SG(n - m, m), SG(n - 2m, m), ......, SG(m, n%m)(此处交换了顺序,因为m>n%m)}考虑里面的...

2018-05-11 14:59:27 187

原创 【博弈SG函数】新尼姆堆游戏

大致思路:这道题就是典型的讲解中提到的“每次取石子的数量是不连续的”,那么就用模板——打表法。就是模板题。代码:#include<iostream>#include<bits/stdc++.h>using namespace std;int S[105];int sg[105];const int maxc=10005;int vis[maxc];int n...

2018-05-10 22:12:05 281

原创 【博弈SG函数-无环有向图】图类游戏

大致思路:有向无环图下棋博弈的经典例题。首先,根据之前的讲解,可知:有向无环图的每一个点到后续的点的移动操作,都可类比成NIM堆游戏中在一堆石子中取走部分石子的操作,所以,我们需要知道每个棋(该题是石子...)的位置,棋子数代表堆数,每堆的数量就看该点的SG值。最后总的SG为所有SG值异或。思考可知,对于每个点,无法用“常识”来得到其sg值含义(“常识”就是指sg=x%(m+1)或者sg=x或者s...

2018-05-10 21:03:49 898

转载 【博弈论】SG函数 知识点详解

看了篇博文,讲解得很通俗易懂了(对比其他讲解...),我把它po过来温习所用。另外,对一些觉得比较关键有用的知识点,注明了原句或加了一些自己的理解(红字)。Nim游戏重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor)运算。Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美...

2018-05-10 19:15:45 2124 2

原创 【威佐夫博弈】知识点讲解(模板记忆)

算法模板记忆:(a,b)成为奇异局势,即“先手必输”的局势。令k=b-a (a,b是两堆物品数量,前提b>a,不然先交换),令参数wzf=(1+根号5)/2a1=wzf*k ;  b1=wzf*wzf*k ;看看是否a==a1&&b==b1,若是,则是奇异局势,先手必输。例题:代码:#include<iostream>#include<cmath>...

2018-05-09 21:41:47 241

原创 【巴什博弈】知识点讲解+例题x1

例题:#include<iostream>using namespace std;int main(){ int m,n; cin>>m>>n; if(m<=n){ for(int i=m;i<n;i++){ cout<<i<<" "; }

2018-05-09 21:22:09 348

原创 【最大费用最大流】贴纸与玩偶

输出格式:输出总愉悦值的最大值。大致思路:又是这种“对应匹配关系”,很容易让人联想到建图。这明显是一个最大费用的题,所以毋庸置疑肯定也是想要最大流的。按照算法模板把spfa改成求(费用权)最长路即可。注意要修改两个地方:距离数组d的初始化要为-inf,用于更新的if语句<改成>。而且在算法模板里要注意,因为是while循环spfa,所以在spfa里要重新初始化visit数组和d数组和pre数组。加...

2018-05-09 20:55:27 188

原创 【最小费用最大流】知识点讲解

概念:在同一个网络中,可能存在多个总流量相同的最大流,我们可以在计算流量的基础之上,给网络中的弧增加一个单位流量的费用(简称费用),在确保流量最大的前提下总费用最小——最小费用最大流。算法思路:边权的数据有两个,一个是容量,一个是费用。主要是两部分,spfa和统计计算最小费用的。用spfa求出最短路(其中有个pre[i]数组表示指向i点的边序号),然后再倒序从终点沿着最短路走反向边,找到该最短路上...

2018-05-09 20:13:39 7690

原创 【蓝桥杯真题 dfs】危险系数

问题描述抗日战争时期,冀中平原的地道战曾发挥重要作用。地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。我们来定义一个危险系数DF(x,y):对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点...

2018-05-03 22:43:30 317

空空如也

空空如也

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

TA关注的人

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