03 2019 档案
摘要:一道简单的括号匹配问题,如果是左括号就入栈,如果是右括号且与栈顶匹配则答案加2,如果不匹配则答案清零,每次都更新一下最优答案即可。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std
阅读全文
摘要:一道单调栈的基础题,我们建立一个单调上升的栈,当一个矩形被扫描时,如果他的高度大于栈顶就直接入栈,否则就不断取出栈顶,直到栈空或者栈顶小于当前矩形,在出栈的同时,我们累计被弹出的矩形宽度之和,每次弹出一个矩形,我们就用他的高度乘累计的宽度更新答案,出栈结束后,我们把一个高度为当前高度,宽度为累计宽度
阅读全文
摘要:栈的入门题,主要考察了栈的基本操作,用递归模拟实现即可 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <cstdlib> 6 using namespa
阅读全文
摘要:这道题是洛谷“八数码难题”的升级版,洛谷只要求出最少步数,而本题要输出结果。 我们在搜索的时候记录每一个状态的前驱,最后输出的时候递归即可。 我们采用A*算法进行搜索,设计估价函数为当前状态每个点与目标状态每个点的曼哈顿距离之和。在搜索时建立一个小根堆维护即可。 代码细节比较多,注意对细节的处理。可
阅读全文
摘要:本来想用双向广搜的,但是不太好保存路径,所以我就用的普通的bfs 思路很简单,从初始状态直接搜,每次扩展三个状态,用函数模拟一下三种变换,用map存储路径即可(拒绝康托展开,拒绝哈希,拒绝状压) 不得不说,对于数据不是很毒瘤的题,STL是真的好用啊…… 1 #include <iostream> 2
阅读全文
摘要:读完题,这是一道和bfs联通快有关的搜索题,肯定要搜索一些联通快,而这道题的难点在于如何判断当前的联通快属于山峰还是山谷。 因此,我们设计一个算法,在用bfs求联通快的同时,判断当前联通快是山峰山谷或者啥都不是。 具体地,我们像往常一样搜索联通快,若扩展的节点高度与当前联通快不同,则开始判断:如果大
阅读全文
摘要:最短路是一个妇孺皆知的算法,可以用多种方法解决。但是第k短路…… 以Dijkstra为例,对于s->t的第k短路,即t点在堆中第k次取出的结果。 于是我们想到了一个朴素的算法:用Dijkstra反复执行,直到t点在堆中第k次取出时结束。 考虑一下优化:用A*算法优化。 根据A*估价函数的设计原则,x
阅读全文
摘要:这是一道搜索题,我采用双向广搜+状压解决,对每一个状态枚举可以移动的位置,将状态扩展,然后通过对数组状压的方法进行记录结果。 另外,注意对答案为0的特判,因为起始状态与目标状态相同时无法搜出结果。 1 #include <iostream> 2 #include <cstdio> 3 #includ
阅读全文
摘要:这算是一道双向广搜或者是A*题,我用的是双向广搜,从初始状态和目标状态分别扩展状态,当他们第一次相遇时所用的步数即为答案。 1 #include <bits/stdc++.h> 2 using namespace std; 3 int ans=123804765; 4 int n; 5 const
阅读全文
摘要:一道难得的搜索好题,题目大意很简单,这里不再赘述,主要说一下思路 当然普通的bfs答案是正确的,但是在CH上评测会TLE一个点,所以我们采用效率更高的双向bfs 从初始状态和目标状态分别搜索,建立两个队列,分别扩展状态。如果一个队列扩展的状态已经被另一个队列搜索过了,那么便出现答案了。 另外,使用m
阅读全文
摘要:这是一道裸的广搜题吧…… 可能是《算法竞赛进阶指南》最水的一道题了…… 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 queue<i
阅读全文
摘要:这是一道广搜题,难点在于对题目的理解和对细节的处理。 对于一个节点,可以向左上、左下、右上、右下四个位置扩展,根据地图的形态确定每一步扩展的代价。 将代价最小的节点放在队头,这样用双端队列来实现。每个节点最多进出队列一次,所以时间复杂度为O(r*c) 1 #include <iostream> 2
阅读全文
摘要:搜索绝对是解决数独问题的一大利器。 我们将不完整的数独读入。如果爆搜的话显然凉凉O(2^81)? 想一下人类在玩数独的时候会怎样——找出填数比较多的行与列的交点,因为这样能排除更多的非法选择。 放到搜索上就能减小搜索树的规模,降低时间复杂度。 我们统计每一行、每一列已经填完的数的数量,再统计每一行、
阅读全文
摘要:乍一看,我想爆搜,但是时间复杂度O(2^n),凉凉。 所以我们考虑优化,用双向搜索解决。 将读入的数据降序排列,从中间一分两半,对前一半进行一次枚举,枚举可能的情况,用一个数组记录并去重。 再枚举后半段的情况,并对每一种情况在左半部分进行一次二分查找即可。时间复杂度为O(2n/2log22n/2)≈
阅读全文
摘要:确实是一道经典的深搜好题,(不过POJ不都是这样吗……)。 首先这道题爆搜就死定了,所以咱们考虑一些剪枝。 1.对所有的木棍按长度降序排序,先尝试较长的木棍,这样可以减少搜索树的分支。 2.定义一个变量,记录最近一次搜索失败的木棍的长度,若即将搜索的长度与之相等,则直接跳过。 3.如果在原始木棒“加
阅读全文
摘要:这道题算是搜索和状压的结合吧,作为状压的入门题还是不错的,能让人初步了解状压的含义及应用。 对这张图进行一遍拓扑排序,然后状压统计(我用了bitset)。 注意读入,因为我的读入优化挂掉了…… 1 #include <iostream> 2 #include <cstdio> 3 #include
阅读全文
摘要:一道很基础的深搜题,数据范围不大,稍加剪枝即可通过。 将重量降序排列,对于已经选了的车,尝试当前的猫能不能坐,如果全部尝试失败,则另用一辆车。 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 typedef lon
阅读全文
摘要:这道题用平衡树能过,但是代码量较大,不易编写和调试,所以我们考虑别的方法解决。 考虑当前为第i天,我们把前i-1天的营业额放入一个容器当中并排序,对于第i天的营业额x,若容器中没有元素,则表示这是第一天。 另外,我们用lower_bound()函数求出大于等于x的最小值x'是多少,若x==x',则这
阅读全文
摘要:本题当然可以用树剖解决,而且是树剖的模板题。但是对于本题来说,有一种更巧妙的办法 树上差分 类似于普通的差分,我们对于题目中的每一条路线i->j,把它拆成i->lca(i,j)->j.然后将i点、j点的权值加一,将lca(i,j)的权值减二 乍看起来没什么毛病,但是仔细想想,对lca(i,j)的子树
阅读全文
摘要:这道题洛谷给的标签是LCA,线段树,树链剖分。 当然LCA+树上差分能通过这道题,但出现在树链剖分当中,我决定用树链剖分解决 显然这是一道裸的树链剖分。树剖之后进行区间修改,单点查询操作。(这道题线段树都不用build……23333) 我们按照题目给的顺序给这一棵"树"放上糖果,当然注意重复的部分要
阅读全文
摘要:这是一道经典的差分题。 思路大概是这样的: 对于输入的序列a(假定长度为n) 我们求出他的差分序列sum 那么题目就转化成了用最少的步数使得差分序列sum的2~n项都为0 那么就有以下的几种决策: 显然,在sumi和sumj一正一负的前提下,我们应该尽可能多的使用第一种,这样才能使答案最优。 统计s
阅读全文
摘要:NOI2015的试题,一道树链剖分的模板题主要过程:树剖完成后对线段树进行区间修改,区间查询。代码较长,很考验代码能力 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 typedef long long ll; 5 i
阅读全文
摘要:本人感觉不错的诗句集锦 明月出天山,苍茫云海间。——李白《关山月》银鞍照白马,飒沓如流星。——李白《侠客行》海客谈瀛洲,烟涛微茫信难求。——李白《梦游天姥吟留别》仰天大笑出门去,我辈岂是蓬蒿人。——李白《南陵别儿童入京》落霞与孤鹜齐飞,秋水共长天一色。——王勃《滕王阁序》堪笑兰台公子,未解庄生天籁,
阅读全文
摘要:第一部分:(参考百度百科) 一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和 David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C+
阅读全文
摘要:这是一道树链剖分的模板题,首先要学会线段树、dfs、链式前向星之类的,不然……//打暴力吧 本题很考验代码能力,难度不大,主要是细节繁多。(我调了1h) 树链剖分的原理不再赘述(详见《信息学奥赛一本通·提高版》),主要说一下一些容易错的细节。 ps:本人树链剖分的写法来源于《信息学奥赛一本通·提高版
阅读全文
摘要:欢迎访问本人的个人博客,我是山东NOIP一名提高组OIer,于2017年省选前入役。本博客记录了本人学习信竞时部分题解及学习笔记。 代码原创,如需转载请私信征求本人同意。 联系方式QQ:2953846540 邮箱:2953846540@qq.com 祝你RP++!
阅读全文
摘要:先说80分代码:最基本的混合背包,判断是完全,01,或是多重,再选择。 状态转移方程:f[j]=max(f[j],f[j-co[i]]+v[i]); 再说100分代码:把每个物品进行二进制拆分,分成1,2,4,8,16,32,64 ,,,再把花费和价值乘以次数即可。 例如:某个物品可以用20次,那么
阅读全文
摘要:本人今天刚刚学会最大流,此题感觉完全没有提高+的难度,仅仅是一个模板最大流,我用了Dinic算法,而且本题数据很小,邻接矩阵存图即可。 注意:本题大小写字母均包括在内!! 被卡了一次10分 Dinic模板的代码 (AC本题)
阅读全文
摘要:本人是NOIP2018省二的蒟蒻,最近练习状压,总感觉楼下的题解晦涩难懂,我决定自己写一篇题解造福一下广大蒟蒻 首先看数据范围就猜到了状压dp…… 设f[i]表示完成状态i(二进制位,状压)这些歌获得的奖励; 则答案为f[(1<<n)-1]。 对于一个状态i,若第j首歌没完成,即i&(1<<j-1)
阅读全文
摘要:一道普通的树链剖分模板题,注意细节即可 几个易错点总结:
阅读全文