ACM练级日志
文章平均质量分 55
暗黑Zero
这个作者很懒,什么都没留下…
展开
-
HDU 4819:单点更新,区间查询的二维线段树
我越来越觉得之前自己的代码写的就跟shi一样……题意很简单,矩阵中指定一个方形原创 2014-09-05 16:01:52 · 674 阅读 · 0 评论 -
ACM练级日志:可持久化线段树初级-POJ 2104
近期决定把数据结构技能树继续开发下去,学习更深入层次的三项技能:可持久化线段树、动态树、树链剖分。然后那天看了看动态树,碎了,然后就去看可持久化线段树了……简单地说,这玩意是一个可以保存修改的历史版本的线段树。其本质想法是:对线段树每改一次,就建一棵新的树,保留原来的版本。这听起来挺疯狂的,但是却有很令人意想不到的用处:比如POJ 2104这个题,普通线段树是无力的,但是如原创 2014-08-09 22:25:16 · 626 阅读 · 0 评论 -
POJ 3335 半平面交与多边形的核
半平面,指的就是一条直线把一个平面分成了两个半平面…… 如果原创 2014-08-26 15:44:37 · 840 阅读 · 0 评论 -
POJ 1873 & 1228 凸包和稳定凸包
凸包指的是这么一件事:pin原创 2014-08-26 15:20:22 · 587 阅读 · 0 评论 -
HDU 5031:看脸的DFS
我仍然觉得这道题十分的不科学……题目是说你有一个原创 2014-09-22 11:20:44 · 905 阅读 · 0 评论 -
ZOJ 3814:模拟和状态压缩BFS
这题绝对是一个大坑……题意是,有一个拼图有9块,每一块的四条边都可能有齿轮。每次你可以选择原创 2014-09-11 18:22:40 · 1136 阅读 · 2 评论 -
HDU 4979: 更好的DLX模板 + 打表
本题构造矩阵并不难,用所有可能出现的组合当列,用所有可能买到的组合当行,然后paoyige原创 2014-08-29 11:08:23 · 644 阅读 · 0 评论 -
POJ 3525 二分答案,推进多边形和半平面交
题目在问这样一个问题:给定一个凸多边形,找到一个原创 2014-09-02 16:16:00 · 750 阅读 · 1 评论 -
HDU 5047:JAVA输入输出的正确姿势
能用BigInteger耍赖是JAVA的一大特色,但是如果用我们熟知的输入原创 2014-09-28 11:14:46 · 664 阅读 · 0 评论 -
HDU 5072:同色三角形,容斥原理,预处理的顺序
谨以此题纪念逝去的银牌……题目大意:给定N个正整数,互不相同,原创 2014-11-13 21:06:52 · 682 阅读 · 0 评论 -
Codeforces 482B 线段树与离线区间加和问题
题目大意是说,请你构造一个长度为n的数列,满足给定的原创 2014-10-29 16:54:46 · 742 阅读 · 0 评论 -
POJ 1486:二分图匹配的必须边
题目大意:给定若干个矩形,以及原创 2014-11-16 13:16:16 · 513 阅读 · 0 评论 -
ACM练级日志:POJ 2886 约瑟夫环,线段树和反素数
我昨天才知道模拟约瑟夫环是可以用线段树来解的……不妨假设总共有N个人,他们的编号是1~N(这个编号很重要,影响到后面的推导)怎么解呢?我们用一棵线段树,每个节点记录一下这个区间还剩下多少人,一开始当然就是R-L+1个人了。然后我们要做的事情就是,每次先求出这次要出列的“绝对位置”,然后用线段树查一查这个绝对位置上站的是谁。所谓“绝对位置”,就是1~N,不会变的,比如原创 2014-08-09 22:32:34 · 623 阅读 · 0 评论 -
微软2016校招笔试 第一场部分题目个人思路
嗯……第一场当时还不知道报名,第二场报上了,拿了250/400,果然分如其人…… 这里包括的是第一场的ABC题,第二场的AB题的题解(这些都是自己AC了的),第一场的D和第二场的C至今仍然在WA,不知道怎么回事,到时候也讲讲思路求指点吧。第一场A. Magic Box这道题并不难做,唯一需要注意的是cx,cy和cz,以及任意两个量的差之间是没有前后关系的(这个事情样例里也告诉你了),所以比较简单的原创 2015-04-25 11:04:55 · 1065 阅读 · 0 评论 -
微软2016校招笔试 第二场部分题目个人思路
A. Lucky Substrings这道题并不难,由于字符串长度只有100,那么它的子串肯定不超过1w个,枚举出所有字串都是没有问题的,至于检验一个子串里面不同的字母数量是不是斐波那契数,我们只需要事先把斐波那契数列小于1w的项都生成出来,然后枚举一个子串之后,统计出不同字母的数量(边找边统计,如果当前字母之前出现过就不加,如果没出现过就记住并+1),去这个里面找就行了。斐波那契数列推不了几项就到原创 2015-04-25 20:10:48 · 908 阅读 · 0 评论 -
KMP的第n次学习笔记
关于字符串的下标:建议都用从0开始的下标。给谁算next数组?给模式串(Pattern)算next数组。KMP保证的是母串(Text)一个一个字符来的时候永不后退,但模式串的位置是要经常变化的。千万不要去给Text串算next数组……即:应该是给pattern串构建自动机,而不是text串。text串要在这个自动机上运行。关于next数组:真正编程的时候,next数组并...原创 2018-04-30 18:10:46 · 244 阅读 · 0 评论 -
ACM练级日志:HDU 4274
是挺简单的一道题,但是却无限WA,总共修改了这么几个错误:第一,每个人都至少要有一块钱工资,比如1号下面有2号,3号,2号有1块钱,3号有一块钱,那么1号至少要有3块钱才行,如果给出条件说1 第二,在这棵树从底下往上更新的时候,只需要更新理论下界就可以了,因为底下人拿得再少,作为主管的人也可以拿很多,底下人都第三,注意用long long第四……最后WA是WA在这儿原创 2014-08-09 22:14:59 · 508 阅读 · 0 评论 -
ACM练级日志:带权并查集与食物链
最近终于干掉了高中两年都没有搞定的题目:食物链,就是那个A吃B,B吃C,C吃A这道NOI的经典题。当年自己写了200多行,把自己都写碎了,也没弄出来,最近学习了带权并查集,终于搞定了这道题。首先说说并查集为什么能带权值…… 原先,最基本的并查集是维护等价关系了,如果A跟B处于同一集合,那说明A和B就是等价的。但是如果给并查集每个边覆上权值的话,那么并查集就不光能表示等价关系,原创 2014-08-09 22:28:46 · 739 阅读 · 1 评论 -
ACM练级日志:set
STL这个东西有时候会出乎意料的好用,第7篇那个让我写了200行的Treap用set这个玩意可以省掉很多代码……所以之后又用set重新写了一遍,正好以前也没用过set,记录一下,万一下次还有呢。set需要开#include,包含set和multiset;set是一个排好序的数据结构,不管你以什么顺序塞进去的,里面都是排好序的,比如你塞5,2,9,1进去,set里面就是1,2,5原创 2014-08-09 22:13:04 · 505 阅读 · 0 评论 -
ACM练级日志:最大流的FF算法、匈(N)牙(T)利(R)算法
最大流的FF算法似乎是最简单的,即使是之前没怎么接触最大流的我也照着标程两下就会了。FF算法大约是这么一个过程:不断地寻找源点到汇点的增广路,找到一个是一个,找不到了,那就已经是最大流了。找增广路的时候,假设我在s,我就看看我能看见谁,看他走过没有,能不能给我带来增广路,如果能的话就太好了,我也回答我能带来增广路,同时一个流就产生了。当然也要弄一条反向边,方便这个算法后悔。原创 2014-08-09 22:30:10 · 1871 阅读 · 0 评论 -
POJ 2074 视线问题
一开始看错了题意,把“不能完全看见” 错看成了 “完全不能看见”, 结果样例原创 2014-08-22 13:43:22 · 625 阅读 · 0 评论 -
ACM练级日志:Treap个人用模板
原来是照着动态的模板写的,有几个地方还真不太好改,在这儿记录一下免得下次又纠结半天……#include#include#include#include#include#includeusing namespace std; int t;int n; struct ntype{ int num; //值 int fix;//修正值 int le原创 2014-08-09 22:09:36 · 580 阅读 · 0 评论 -
ACM练级日志:HDU 4433 Locker
天津现场赛的一道题,说有两个密码串,每次你可以转第一个串连着的最多三个数,问最少转多少次能把第一串转成第二串。开始以为是搜索,后来一看n不过我的DP跟他们都不太一样,听说有人用f[i][x][y][z]表示:目前在i的位置,当前是z,前一个是y,再前一个是x,这样的话每次想办法把z转对了以后,就可以转移到f[i-1][ a[i-3] ] [x][y] 之类的了,转两个、原创 2014-08-09 22:18:50 · 576 阅读 · 0 评论 -
ACM练级日志: POJ 1376
本来是因为另一道题过不去而来找一道搜索题虐一下的,结果自己反而被虐了…… 这是一道很纯粹的BFS寻路题,写的时候因为比较急躁,犯了不少错误。写题的时候还是不能着急啊,尤其是比赛的时候更为紧张,稍微一错够你调个半天的。写的时候还是一步一步慢慢写比较好。补丁打多了容易乱。还是应该回到NOIP那种状态。说起技术性的问题,需要注意的是调试的时候输出调试信息似乎也很有原创 2014-08-09 22:05:55 · 683 阅读 · 0 评论 -
ACM练级日志:微软编程之美比赛测试赛-3(高精度相关)
微软的这个测试赛也不是那么水,看第一题那个不友好的A+B也就能猜出一二,第三题那个套着高精度的DP是无数NOIP小白的噩梦,包括我在内。不过学习了面向对象程序设计之后似乎对以前处理高精度的方法重新地认识了,发现如果用这种思想去对付高精度的话,事情会简单不少。把高精度的数定义成一个struct是非常明智的。好吧,我对class还比较怀疑,所以暂且还是用struct吧,这样就可原创 2014-08-09 22:05:11 · 741 阅读 · 0 评论 -
ACM练级日志:POJ 3074 数独与DLX
各位还在使用百度空间的同学们,请原谅最近被我刷屏…… 数独是DLX建模的最经典应用,它最好地示范了“行=决策,列=约束”的建模方法,配合快速的DLX深搜,使它成为了目前最快的求解数独的方法。每行是一个决策,在数独里做的决策,就是每一个格填几,也就是说,你要从81*9=729种决策中挑出81种构成一个数独的解,于是我们就会有729行,每行都是一个决策。但是这也原创 2014-08-09 22:24:51 · 669 阅读 · 0 评论 -
ACM练级日志: CodeForces 414C 归并排序、逆序数和栈内存
时间一长居然连归并排序都忘了怎么写了…… 偏偏这玩意还不能用STL,必须手写…… 而且这道题又是递归又是取反又是求和,真心麻烦,费了我一个上午才弄出来……期间还遇上了各种各样的问题。记录一下归并排序:开数组的时候没什么特殊情况就开在全局变量里,然后tmp数组也可以开在全局变量里,由于栈内存的限制,不要把局部变量开得很大,通常栈内存只有可怜的16MB,稍微奢侈一点就爆了……而且爆原创 2014-08-09 22:29:28 · 882 阅读 · 0 评论 -
ACM练级日志:POJ 2318 叉积的简单应用
最近开始学习计(keng)算(die)几何,第一道入门题就是这道了。本题最核心的问题,就是如何判断一个点在直线(线段)的什么位置。这一点叉积可以很容易地做到。设直线(线段)的向量为S->E, 询问点为P, 那么我们只需要计算一下 S->P x S->E, 如果大于0,说明S->P 顺时针旋转会达到S->E, 等于0说明就在直线上,小于0说明它需要逆时针旋转才能达到S->E。原创 2014-08-09 22:33:38 · 610 阅读 · 0 评论 -
ACM练级日志: POJ 2155、1151
这些日志仅供以后防止自己出现过去犯过的错误,起到一个注记的作用。若其他的ACMer觉得有用的话,本人也感到欣慰~最近一直在练线段树,说说线段树的“染色问题”和“计数问题”。比如POJ的2155,Level 2的一道题,入门二维线段树,这道题一开始被我当成了染色问题。本来想用每个node去记录这一段是0还是1,结果后来发现二维线段树在x维度上标记没法下传。如果你第一维进的no原创 2014-08-09 21:54:11 · 475 阅读 · 0 评论 -
ACM练级日志:模板的使用
最近碰上的几个题目使我开始注意到模板的使用是多么的有力。 先是上周的微软比赛第二场——当然我被淘汰了——第一题上来就是一道网络流(当然AC算法是找增广路),我可是一点网络流不会,但是恰好手头有网络流的标程,于是借来一用,修改输入输出,然后就骗了10分;然后是划分树这个破玩意,我要是比赛的时候肯定写不明白那一堆-1,+1,调就得调个一小时,那岂不是耽误事么? 还好,ACM有一条原创 2014-08-09 22:08:21 · 663 阅读 · 0 评论 -
ACM练级日志:HDU 4286 STL-双端队列 以及Presentaion Error
干掉了去年天津赛区的一道题,还是很爽的,去年用双向链表没有做出来,今年用双端队列做出来了。想法非常简单,把整个序列切成三段,左边一段,L-R一段,右边一段,这样移动指针就是队列之间把队头/队尾元素互相踢来踢去的问题了。增加删除元素都很简单,至于反转,只需要用一个bool记录当前是否是反转状态,然后在增加删除移动时分类讨论即可。双端队列在STL里有,我用了STL里的是因为原创 2014-08-09 22:19:06 · 720 阅读 · 0 评论 -
ACM练级日志: POJ 1389
这个也是一个矩形面积并的问题,和1151几乎一模一样,不同的是,数据范围有点不同:1151是100个矩形,每个矩形的坐标是小数,而这个是1000个矩形,每个坐标在50000以内。50000这个数看上去还可以,连离散化都不用(1151因为是小数所以还必须得离散化),理论上复杂度是2000*log50000,应该秒出,但是经试验各种TLE。后来迫不得已加了离散化,结果很快就过了。最原创 2014-08-09 22:02:17 · 530 阅读 · 0 评论 -
ACM练级日志:“不作死就不会死” --HDU 4283 & 4284
4284是一道图论+搜索题……好吧,虽说标准解答是图论+DP题,h顺便说下Floyd的问题,之前一直记不住数组应该怎么初始化之类的细节问题,导致我一直不敢用,因为Floyd太精密了,那三个循环错一点就会跪,而且你还看不出来。特地在此记上:第一,直接在邻接矩阵map上搞就行;第二,一开始把map[i][j]都赋成INF;第三,顺序是kij(有其他的,不过就用这个吧),然后记得判i原创 2014-08-09 22:18:08 · 707 阅读 · 0 评论 -
ACM练级日志:HDU 4735(ACM 成都网络赛) 重复覆盖与DLX
今天费了一下午+一晚上的劲,终于把重复覆盖问题给解决了。作为这算法的牺牲品的就是成都网络赛让我知道DLX这东西存在的那道题,HDU 4735。这也是第一次尝试独立对问题构造矩阵然后调用DLX得出结果的题目。题目是说有一棵树,树上每个节点有一个男孩或女孩,每个男孩能保护距离为D以及D以内的节点,你可以任意交换两个节点的孩子,最后要使得所有女孩都被保护。问最少需要交换多少次。实际上原创 2014-08-09 22:26:32 · 694 阅读 · 0 评论 -
树状数组的第n次学习笔记
树状数组能解决什么问题?树状数组能高效地维护前缀和,尤其是“查区间改点”类型的前缀和。 如果树状数组是c,原数组是a,那么c[i]表示的是a[i],a[i - lowbit(i)]…这些数的和。 树状数组能直接求的是1~x位置的和,也就是前缀和。区间的和是用前缀和减出来的。怎么做到的?树状数组的每一个位置管几个位置,位置x写成二进制的时候管最低那个1对应的那个数的位置。 比如...原创 2018-06-12 10:07:24 · 196 阅读 · 0 评论