![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《算法竞赛-训练指南》
文章平均质量分 73
AledaLee
个人博客已经迁移到了https://sites.google.com/site/lishuo02wiki/,主要是一些技术的分享,有需要的可以访问。
展开
-
《算法竞赛-训练指南》第五章-5.2_UVa 10047
这就是个简单的模拟题目,就是BFS搜索过去就行了,但是这道题目的新颖之处就是其实轮子最底部的颜色必须和最后到大目的地的时候的颜色一样,这样就有点麻烦,开始的时候没有用4维的vis,想不借用vis,发现效率太低,根本不能解决问题,题解上面是4维的标记做的,然后自己就模仿,重新写了一遍BFS,发现还是过不了,样例都过不了,这真的狠气人呀,等我有空一定重新写一遍!现在先贴出题解的代码,附上我自己的错原创 2013-09-27 20:43:21 · 805 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.28_LA 3485(simpson)
做这个竞赛题目,就是相当于高中的数学难的题目,你做出来了,万人敬仰,你稍微错了一点,没有做对,那么不好意思,不管你思路对还是很对,你都不是那个会做的人。题目如此,事情也是如此,错过了再想挽回可能就后悔莫及了。这道题目的主体思想当然是求解,如果你数学的求解能力非常的强,那这个题根本就不是个事,但是你不行的话,那不好意思,你做不出来。这里用到的求解微积分的面积的时候常用的方法simpson法。原创 2013-08-27 21:39:51 · 648 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.12_LA 5059
真的很喜欢这个专题,就是两个人玩的游戏专题。这里面包含的思想是非常重要的,数学味道,逻辑味道非常的浓厚。经典的代表游戏就是Nim>游戏:游戏的描述是这样的,给你三堆火柴,你每次可以从每堆里面拿出一个,或者一个以上的,当然可以是正堆都拿走。两个人玩,每个人都是玩的最棒的。问你,怎么判断输赢?其实对每堆求一下Nim和就可以了,也就是对所有堆求疑惑,结果为0,先手必输,否则先手必赢!这里用S原创 2013-08-14 22:47:39 · 704 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.14_UVa 11021
概率的题目,但是做起来也不是很顺手,觉得情况太多了,实在是无从下手。题解给出了思路:令f[i]表示起初有一个鸟,经过i代之后全部死亡。然后就推出了一个公式f[i] = p0 + p1*f(i - 1) + p2*f(i - 1)^2 + p3*f(i - 1)^3......这是怎么得出来的啊???百思不得其解#include #include #include #inclu原创 2013-08-15 11:06:01 · 767 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-数论常用算法总结
数论是一个神奇的东西,各种结论都很经典,有些懂,有些自己还不是很懂。接下来就一个一个的介绍吧。第一、素数,素数本身就是一个很让人惊奇的数,因为它代表的是唯一,自己就有连个因数,一个是1,一个是自己,因为1是每个数都具备的因子(除了0),所以,它也就相当于只有自己。是一个自我感觉很良好的人呀!最朴素的算法当然是从2-sqrt(2)里面找因子,如果没有,就说明它是个素数。为什么到sqrt(原创 2013-08-13 09:17:17 · 1064 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.9_UVa 11426
题目越来越难,自己做都做不下去了,主要是自己不能够静下心来。这怎么静下心呀?和一些人还是差距太大呀。人家才是真正的聪明人,我这一遇到难点就做不下去了,这怎么可能能做出什么成绩,每次都当在后悔的时候自己才下定决心,那样真的有用么?而自己学习这些知识的最终目的又是什么呢?这真是个矛盾的地方。自己明明已经告诫自己了,自己不适合那种势力的想法,我就是单纯的想学习知识。学到学不到,全凭自己的兴趣原创 2013-08-13 16:11:02 · 737 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.5_UVa 11361
这道题目写了两天呀,好气愤呀。就是静不下心来,也不知道怎么回事。也是这题目一直不让我过,改来改去都改不对。所以今天就什么都不想了,重写一边,开始也过不了,不过改了一下就过了。气愤呀!这道题目是个好题目,题目的大概意思是这样的:给你a,b,和k,问你在a-b之间有多少个这样的数字x,使得x%k == 0 并且 x的各个数字相加起来的和%k == 0。明显暴力是过不了的。这种题目第一步都是原创 2013-08-11 16:43:22 · 664 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.4-LA 3516
这几天一直静不下心,做题一点都没有效率。也可能是动态规划这边的题目实在是有点难度,所以有时候搞一道题目都弄的很长时间,很悲催。在一个就是自己的智商不怎么样。这道题目的意思是给你一个序列,求出以这个序列为准的,所有的树。这样就得实用递归求解了,也就是每个树都可以分成左子树和右子树,这两种书其实又可以看成是独立的树。所以就分成了子问题求解,非常的不错。递推方程就是 dp(i, j) = s原创 2013-08-10 11:33:48 · 695 阅读 · 0 评论 -
HDU-4651 && HDU-4658
这种题目怎么老是出现呀,好些题目都是整数拆分的题目。看了不弄懂是不行了,但是性质真的是太多了,学不完呀。今天先把这个这个关于整数拆分的题目全部简单类型弄懂吧:第一种,就是存在顺序关系,问你N可以被拆分成几种:2^(n - 1),这是个排列组合的题目,不具有实际意义;第二种,就是今天出现的这种题目,给你一个数,问你可以拆成多少种不同的方法?这就比较麻烦了,但是人家研究出来了!我就佩服了。原创 2013-08-08 21:56:42 · 1053 阅读 · 0 评论 -
小范围求整数的划分(递归实现)
泪奔了,求的范围太小了。估计也就到100,就很难进行下去了。因为种类数是在太多了。还只能用五边形数的那种方法解决。诶,还得研究那个东西,贴出来吧:#include #include #include #include using namespace std;int divInt(int n, int m){ if (n == 1 || m == 1) { return原创 2013-08-09 22:40:40 · 767 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.26_UVa 10341
这是一道纯解方程的题目,因为确定了范围,可以直接判断它的单调性。然后根据图像求解。就注意这种单调性求解的题目一般都是要二分的。而因为double类型的一些缺点,并不想我们现实中那样。比如1就是1,在double型里面1可能是0.999999999999。注意这些就行了。另外就是二分的时候R-L尽量的小一些吧,因为越小答案就越精确。这个不一定就是保留到4位,你就1e-5就行,这是不一定的,稍微小原创 2013-08-21 17:59:23 · 745 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.4-pre_Catalan
求catalan数,经典的题目想对应的就是凸多边形三角剖分数,枚举顶点,递推求解。#include #include #include #include using namespace std;const int MAXN = 100;long long f[MAXN];void init(){ f[3] = 1; for (int i = 4; i < M原创 2013-08-08 10:27:00 · 860 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.3_UVa 11806
这段时间老是遇到这种题目呀,就是所谓容斥原理的题目,比如第一章的1.24(猛一下还没有想起来具体的题意……一会得去看看)。这道题目,我自己做的是分情况讨论,还用了什么Lucas,也都忘了,到最后也没有写对,一看题解,就又崩溃了。题目的描述是:在一个N*M的矩阵中放拉拉队员,但是这里的拉拉队员可得想象成一样的东西,比如石子什么的。题解上想象成了石子。然后问你,四周必须至少有一个石子。原创 2013-08-07 22:15:11 · 720 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-HDU_2018
其实这是道非常简单的递推题目,但是我也想把这道题目传一下,就是关于思想的问题。分类讨论的思想:今年的母牛数量就等于去年的老牛数量,加上刚生出的小牛数量。而去年的老牛数量就是f[n - 1],刚出生的小牛数量就是3年前的牛门,因为只要一过了3年任何牛都可以生育,所以对于去年的牛来说,新增加的牛的数量就是3年前的牛的数量。#include #include #include #i原创 2013-08-08 09:55:22 · 927 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.2_UVa 11401
这道题目让我一搞就给搞出来啦, 0.-!还是比较开心的。其实也是比较简单的一道题目,全部的-不合格的=要求的。就是处理上,需要做一个预处理。简单题目,就不说别的了,贴出自己的代码:#include #include #include #include using namespace std;const int MAXN = 1000000 + 11;原创 2013-08-07 19:41:22 · 743 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.27_LA 5009
等会再说我的感想,还是要先说说这道题目:题目的意思是:已知有n条抛物线,S(x)=ax^2 + b*x + c,定义f(x) = max(si(x)),求出f(x)的最小值,范围是0-1000。这就比较麻烦了。但是我还是有思路的,因为是求最大最小值,肯定应该是二分,但是怎么二分,我这就不是很清楚了。二分第一个条件不应该是具有顺序么?这样形成的下凹曲线有顺序么?此题,题解上用到的是三分。原创 2013-08-27 20:11:48 · 639 阅读 · 0 评论 -
《算法竞赛-训练指南》第三章-3.1_UVa 11995(STL数据结构运用)
这道题目就是很裸的STL应用。考察的就是你对STL中的数据结构的应用。就有一点我不知道怎么弄就是,用完之后怎么样清楚这个容器,难道是要用while(!empty())?不是很清楚,还得看一下题解的代码比较好一些。题解也是个这么个思路,只不过是将三个分别判断了一下,我的是一个函数里面,无数个if,else。简单的题目,题解也没有清理,也是每次用的时候重新申请一片区域。贴出代码:原创 2013-08-28 11:28:38 · 671 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.15_UVa 11722
这道题目非常的好,个人非常的喜欢!这道题目的意思是:两个人要坐火车相遇到一个城市,但是坐火车到一个城市的时间是不确定的,第一个人到车站的时间范围是[t1,t2],第二个人到车站的时间范围是[s1,s2],而车在车站停留的时间是w。问你两人在车站相遇的概率是多少?其实我认为这道题目的结果是有些问题的,其实题解是按照[t1,t2]范围内,火车已经离开的,但是按照真实的题意,不应该t2到,t2原创 2013-08-16 20:39:12 · 753 阅读 · 0 评论 -
《算法竞赛-训练指南》第五章-5.1_UVa 11624
这道题目可能给了别人也就是几分钟就求出来了,因为是比较基础的一个题目,但是对于我这个重新拿图论来复习的人来说,还是写的时间偏长了点,但是自己最起码是独立写出来了,还是比较不错的,虽然错了几次,但是心情还是不错的,用到的放大就是先处理火到大每个格子的时间,然后模拟人BFS,如果时间小于火到格子的时间就可以继续,不然的话就不行。就是个简单的过程。贴出自己的代码:#include #inc原创 2013-09-24 22:31:13 · 830 阅读 · 0 评论 -
templete_表达式树
#include #include #include #include #include /* *这个问题是我独自想清楚的,(当然也是看了别人的思想)其实只要自己动脑筋,其实许多问题都是可以解决的,下一步需要解决的就是大于10位数的 *四则运算,这个运算只能解决一位数的四则运算还是比较不方便的。一会就得自己学着解决大数问题的四则运算。 */ using namespace s原创 2013-09-13 17:26:21 · 993 阅读 · 0 评论 -
templete_Matrix
#include #include #include #include using namespace std;struct Matrix{ const static int MAXN = 200; int data[MAXN][MAXN]; int n, m; int MOD; Matrix() { n = 3; m = 3; MOD = 110100;原创 2013-09-11 21:28:58 · 918 阅读 · 0 评论 -
HUT_ACM #1 D Matrix Multiplication(ZOJ-2316)
这道题目的意思是:N个点,M边,然后根据题意建立一个矩阵,然后让你求ATA。A的转置矩阵乘以A的矩阵,然后求得的矩阵每个元素再求和。由于矩阵是在是太大了,连储存都无法储存的,所以只能够找规律了,刚开始的时候连样例都是找不出是怎么得到的,那个急呀,要不然其实我很早就能过了这道题目的。但是听别人讲的又是一种思路,自己就是这样,有了自己的方法就不想去学别人的想法了。这怎么能行呢?先贴出自己的代码,然后再原创 2013-09-11 17:54:35 · 1272 阅读 · 0 评论 -
templete_LIS
#include #include #include #include #include using namespace std;const int MAXN = 100;int d[MAXN];int LIS(int *A, int LEN){ int len = 0; d[0] = A[0]; for (int i = 1; i < LEN; i++) {原创 2013-09-11 21:51:42 · 818 阅读 · 0 评论 -
HUT_ACM #1 A - Chinese Girls' Amusement(ZOJ 2313)
居然忘了每次做完题目贴出心得体会!现在才想起来自己忘了总结了。这道题目的意思是:给你一个N个女同学的环,问你:请给出一个最大的K,使得K个人传球,每个人都能摸到球,题目很好理解,请结合样例。(注意格式控制)我做出来的比较慢,一看范围那么大,我就觉得应该是一个简单的数学推导的题目,但是当时就是没有绕开圈子,倒最后才最终找出规律。其实大家只要是仔细想过这题目的话,正确的思路就应该是奇偶原创 2013-09-11 17:24:52 · 1176 阅读 · 0 评论 -
《算法竞赛-训练指南》第三章-3.8_UVa 11235
不是自己智商不够,而是自己不能钻进去,不能静下心来,学习新的知识点,其实这个信息竞赛和其他的竞赛也是一样的,知识点庞杂,所以自己一定要能够静下心来好好的学习。虽然不一定都能涉及到,但是自己一定要精心的学习真正的用脑子思考。这道题目的意思是:给你N个非递减数列,然后任意给定范围,求得范围内出现最多的次数,并输出。这个题目看似简单,其实想清楚也是比较困难的。要用到游程编码,这个具体的思想我也不原创 2013-09-04 11:21:59 · 888 阅读 · 0 评论 -
《算法竞赛-训练指南》第三章-3.7_LA 3429(树状数组)
树状数组的题目还是说比较简单的吧,主要就是解决动态更新求和的问题。主要运用到的就是lowbit的翻倍求和思想。编码很少,但是主要是思想。一看出现:动态的修改单个元素并求前缀和的题目那就是用树状数组解决此问题的。别的不多讲了,这道题目还是比较不错的,将的是给你N个不相同的Ai,问你两个一小一大的Ai夹这一个中等的Ai的情况有多少种。解题想法是这样的,既然要求是不相等的,而且A的范围不大,可以想到原创 2013-09-02 21:08:59 · 731 阅读 · 0 评论 -
《算法竞赛-训练指南》-第三章-Trie
#include #include #include #include using namespace std;const int MAXNODE = 1000000 + 11;const int SEGMA_SIZE = 26;struct Trie{ int ch[MAXNODE][SEGMA_SIZE]; int val[MAXNODE]; int size;原创 2013-09-09 17:25:53 · 748 阅读 · 0 评论 -
2013.9.9杂感
每当到了这个时候我就慌了,不知道怎么办才好,后悔当初没有利用自己静心的时候痛快的学,现在没有了这个机会却非常想好好的学,连心都静不下来了。压力有了,我需要舒服的舒压。找个没人的地方,找个没人的地方,找个没人的地方!!!原创 2013-09-09 20:26:43 · 785 阅读 · 0 评论 -
《算法竞赛-训练指南》第三章-RMQ
RMQ求区间内的最大值,最小值。平常的区间更新算法都不很好求,当然线段树可以。马上写线段树的算法。具体的讲解都在代码中:#include #include #include #include using namespace std;const int MAXN = 1000 + 11;int A[MAXN];int N;int d[MAXN][22];void原创 2013-09-02 22:12:24 · 701 阅读 · 0 评论 -
《算法竞赛-训练指南》第三章-3.6_LA 3027(并查集)
这道题目也是比较不错的,就是会用到路径压缩的并查集,然后用d[u]记录上到父节点的距离,在每次路径压缩的过程中就把距离叠到你要求的结点。这个看了代码以后,就比较简单了:#include #include #include #include #include using namespace std;const int MAXN = 20000 + 11;int N;i原创 2013-08-28 22:12:55 · 723 阅读 · 0 评论 -
《算法竞赛-训练指南》第三章-2.2_UVa 11991
这道题目也是比较简单的吧,就是用vector就可以解决,也是一个比较简单的用vector,当做邻接表来用吧。比较方便,实用。这个没有什么好说的,就是注意每次用完之后都要清楚一遍容器就行了。贴出代码:#include #include #include #include #include using namespace std;const int MAXN = 10000原创 2013-08-28 19:30:00 · 727 阅读 · 0 评论 -
《算法指南-训练指南》第三章-3.5_LA 3644(并查集)
这道题目还是比较简单的,刚开始没有看英文题目,就很明显的错了呀。然后仔细看了一下题目,是需要转化一下的,题目中不成立的情况应该是这样转换的:化合物正好是两种元素组成的一条边,然后爆炸的情况就是点的数量等于边的数目,当然也就是成环的情况了,这个情况可以用并查集,来判断是不是有环,贴出代码:#include #include #include #include using names原创 2013-08-28 20:26:40 · 808 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-2.1_UVa 11538
这道题目自己是做过的,悲剧了,当时可能就没弄懂,或者弄懂了又忘了,刚才去核实了一下,一模一样的题目。这说明了什么问题?说明了不及时复习,学也是白学,说明了如果自己不是用心去对这些知识点感兴趣的话,学也是白学。说明了自己的脑子有问题,爱忘东西。算了不埋怨自己了。题目的描述就是2个皇后在N*M的期盼上,同一行,同一列,斜着都可以攻击对方,问你有多少种可能。用的组合公式求解的。首原创 2013-08-07 17:15:16 · 665 阅读 · 0 评论 -
《算法竞赛-训练指南》第二章-数论_高斯消元
矩阵是个神奇的东西,也是线性代数求解当中很重要的一个工具。线性方程组求解的时候,就要用到矩阵。增广矩阵求解的过程还是比较简单的,就是很久就学过的高斯消元,只不过是以前不这样叫,没有系统的方法执行出来说明什么样的步骤才是真正正确的步骤。这个在自己学线性代数的时候其实就应该懂的。实现起来,其实就是一个用语言来实现思想的事。贴出代码:#include #include #incl原创 2013-08-20 09:22:21 · 755 阅读 · 0 评论 -
stringstream的用法详解
使用stringstream对象简化类型转换C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果你已习惯了风格的转换,也许你首先会问:为什么要花额外的精力来学习基于的类型转换呢?也许对下面一个简单的例子的回顾能够说服你。假设你想用sprintf()函数将一个变量从int转载 2013-07-20 11:21:52 · 1757 阅读 · 0 评论 -
《算法竞赛-训练指南》第一章-1.19_UVa 11549
这个题目直接就让我给AC了。刚开始的时候还在思考用不用优先队列,但是优先队列是需要排序的,而这道题目明显是不能排序的。所以就想别的方法,发现最优解的求法:首先遍历所有的数,每个数求出他减去其他的数的一个最大值,然后求出这所有的数的最大的值的最大值,我们可以开两个数组,分别求出到i位置的最大值和最小值,最大值减去最小值就是最大值,然后再遍历所有的最大值求出最大值的最大值。贴出代码:原创 2013-07-20 10:28:57 · 732 阅读 · 0 评论 -
《算法竞赛-训练指南》第一章-1.16_LA 3177
这道题目很有意思。但是我就是错的非常离谱,就差拿着题解一句话一句话的去对照了,不,其实我已经对照了的。首先说一下这个题目的意思,就是说有N个塔防的士兵,他们分别相邻,1和2和N相邻,2和1和3相邻。现在每个塔防的士兵要奖品,问题是你发的奖品使得每个相邻的士兵不具有相同的奖品。这个刚开始一看,没思路,是一道非常难的题目。看了题解,也就懂了。自己的智商不高,怪不了别人那。你原创 2013-07-19 21:58:21 · 867 阅读 · 1 评论 -
《算法竞赛-训练指南》第一章-1.17_UVa 11462
我就说,这本书上都是些经典的题目,怎么可能出那么简单的题目,应该是有他目的的。果然,这道题目,用系统函数的sort能过,但是572ms,用我写的hash也能过476ms。但是如果用书本上的解题技巧,那就是快速的过了,162ms。这差距的时间还是蛮大的!数据量一般达到百万之后用这个快速的输入输出函数就非常的快了。不错,还是长见识了。这道题目的代码到是没有什么意思,我把我的输入原创 2013-07-20 09:04:44 · 788 阅读 · 0 评论 -
《算法竞赛-训练指南》1.14-UVa 11520
这道题目一次AC,比较简单。很开心。贴出代码:#include #include #include #include #include #include using namespace std;const int start = 'A';char map[15][15];int N;void init(){ for (int i = 0; i <原创 2013-07-19 11:12:37 · 734 阅读 · 0 评论 -
《算法竞赛-训练指南》第一章-1.13_LA 3635
这道题目好!非常好,虽然自己没有AC。但是,情有可原吧,当然没有AC就是没有AC,但是却是因为自己用了自己写的PI导致没有AC。这个不知道可不可以原谅呢?题意是这样的,有N个pie,有F个朋友,让你把N个pie分成F +1让这些人都吃到一样的体积的pie,当然形状无所谓,但是你总不能这边一块,那边一块。加起来吧。自己一想,这不也是求最大值么?果断二分答案啊。这不就一思考就想原创 2013-07-19 10:18:57 · 714 阅读 · 0 评论