![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 58
Mr_Giraffe
轻轻松松走在超神的路上
展开
-
enlightened landscape
找了好久也没找到这道题在哪提交,写的又臭又长,题目给出来的测试用例倒是过了。主要是思想嘛,理解了。题目的链接:http://blog.csdn.net/zinocpp/article/details/638282那步怎样找连续区间,很精彩啊,考虑一个点可以被那些灯照到比反过来考虑简单多了。就是我求区间的方法应该是最笨的,肯定有高效率的算法。#include #include usi原创 2014-02-07 10:52:34 · 1382 阅读 · 0 评论 -
uva 1009 balloons in a box
开始看刘汝佳的黑书,题有点难啊。第一个例题今天做了一天,不断的wa,最后终于照个往上搜的答案改对了。我觉得出错的原因在于数据类型,这种中间结果有浮点数的,一定要注意比较大小时要统一一下。最后输出的是整数,我一开始用四舍五入的方法做的,看到别人的才知道这简直是小学生水平,直接打印浮点数,保留0位小数就可以了。。代码的组织逻辑也有些体会,独立的功能写成函数,可读性会比较强。可以充分利用库函数,原创 2014-02-04 19:52:27 · 1518 阅读 · 0 评论 -
poj 1116 library
写了一天,还是有一组数据过不了,我真的尽力了啊。。那组最后结果是(2, 34)的数据,我一直输出(1,34),伤心啊。。#include #include using namespace std;int h[105], ls[105], le[105], lp[105], rp[105];int X1, Y1, X2, Y2, n, lb;bool csupport(int i)原创 2014-02-06 09:37:52 · 1405 阅读 · 0 评论 -
poj 1042 gone fishing
用贪心写的,时间效率比较低,用的空间也比较多,第一遍先这样过去了。可以用最大堆实现,应该会快。wa了几次,看到大神的测试用例才过得。310 76 500 30 720 13ans:60, 0, 0Number of fish expected: 0#include #include using namespace std;原创 2014-02-06 12:20:52 · 1196 阅读 · 0 评论 -
BOiI 2001 Mirror
这道又没找到提交的地方。。这样下去可不行啊。。题目的关键我觉得在于 在两条光线相交的位置放一面镜子可以将他们的出口互换。还有细节比如光线射入射出是对称的,因此只需要考虑一半,这一半的射入光线只能往右和上走。关于贪心算法的证明,我一直觉得很难。贪心算法是最优算法,当满足:贪心选择:最优解可以通过局部最优解得到。最优子结构:最优解由子问题的最优解组成。具体到这个问题上,添加镜子的过原创 2014-02-08 18:44:21 · 1288 阅读 · 0 评论 -
uva 177 Paper Folding
这道题一看就知道要用递归,我想不通的是怎么保存状态,最后用了结构体,保存了没条线的位置和方向,然后定义一下两条线之间方向转化时对应的坐标变化,应当是最暴力的一种方法,还好题目规模不大,一次就ac了。觉得保存之后,对结构体数组排序这点想的不错,结合全局变量min_x, 一下就把显示的问题解决了,开心。这道题如果改进的话,应该是对状态的定义和保存上,对称性我用的还是不够充分。#includ原创 2014-02-10 13:45:47 · 1528 阅读 · 0 评论 -
uva 239 小球钟
一看到是world final的题,就觉得很难,虽然也不知道是怎么回事。读到现在了,从来没参加过算法竞赛,太水了。这道题其实不是很难,关键是要想到12小时后,所有球都会回到最下面的队列里面,此时得到的一个序列相当于原始序列做了某种置换得到的,通过这两次置换之间的对应关系,就可以求出每个小球单独的周期,然后求这些周期的最小公倍数就行了。在操作栈和队列的时候,一定要按照题目上描述的顺序,我一开始把原创 2014-02-23 14:37:34 · 1317 阅读 · 0 评论 -
Ural 1181 Cutting a Painted Polygon
这道题我一开始思路错了,在结束递归的时候用的是顶点数减到2,虽然也是每次去掉一个角,但是处理不了特殊情况。看了书上的解法,这个递归结束条件就巧妙很多了,原来递归可以这样,找到一种特殊情况,当递归到这种时,就处理了退出,并不一定规模减少到最少再处理。再想想,根本的思想貌似是一致的。题干强调了各种颜色都会有,并且相同颜色不相邻,应该不用处理吧。不过提交的时候22#出错,不知为何,先不想了。还不原创 2014-02-12 00:10:41 · 1147 阅读 · 0 评论 -
wikioi 2239 Clever
很有意思的题目,一开始总觉得每次问完没有变化,后来想到了最简单的例子, 1 2 3, 算是有些理解了,可还是不够深。看了书上的解析,发现递归结束条件我又想偏了,又去想减少到1或0之类,没想到i==j时可以直接得到结果。缩小规模的方法也很精彩。写成程序提交,总是有数据过不了。一开始我好蠢,还用了结构体,还排序,哎,智商啊。先这样吧,回头再看是哪里的问题。#include #includ原创 2014-02-12 23:36:50 · 1188 阅读 · 0 评论 -
BOII 1998 Evil Eyes
这几天一直在写android,没有技术含量,而且超级麻烦,真烦。下周二要给老板交差,不开心。明天得抓紧,要不然弄不完了。这道题题干不怎么好理解啊,我还以为珠子不能同一水平线呢。递推法思路不好找,找到了写程序比较简单。每次在找可以计算的方程时,不用从头开始的,书上说可以拓扑排序,每个线头的两端可以看做是有向图的一条边,是一定没有回路的。依稀记得有看到过有向无环图先拓扑排序总会简单。不高兴写复杂的原创 2014-02-15 22:41:39 · 1311 阅读 · 0 评论 -
ACM/ICPC Lost lists uva 10202
这道题比较关键的地方有两个,一个是怎么求出前三个数,再就是怎么计算后面的数。枚举法真的是很好的辅助方法,当不能准确确定的时候,都可以考虑一下枚举法。如果都是正整数的话,可以通过和的大小关系来减少枚举量,否则就老实枚举吧。求后面的数时注意k_i一定是a_1 - a_w 中得最小数和a_w+1 - a_n中得最小数相加得到的,每次算出一个数,要把已知的和去掉。实现的时候注意,每次枚举都要把标记数组原创 2014-02-18 13:30:52 · 1202 阅读 · 0 评论 -
CEIO 2001 Chain
这道题的题干不是很好理解啊,找到原题看了,输入输出还是很奇怪。难点不在写程序,在于怎么分析,书上写的比较详细,两两的放入能想到,但具体怎样递推的想不到。看的不是非常明白。#include #include #include using namespace std;int p[3], c[100], pos[100], count[100];int dis(int i, int j原创 2014-02-18 20:40:00 · 1291 阅读 · 0 评论 -
uva 154 rails
难得的水题,但还是wa了一次,仔细点就行了,没什么好说的。#include using namespace std;int s[1005], top, y[1005], x;int main(){ int n; while(~scanf("%d", &n)&&n){ while(true){ scanf("%d", &y[0])原创 2014-02-18 22:02:07 · 1320 阅读 · 0 评论 -
leetcode第一刷_Submission Details
有段时间没更新了,专心刷了几天,差十几道结束,决定把第一季更完,然后按照我的理解分类再分析一遍,第二遍的时候应该会按照问题分类,应该会引用第一季的,如果想到或找到更好的解法,会更新第一季。链表的问题就是恶心,思路大多直接,对指针的操作要非常小心。我自己常犯的错误主要有:1. 在取val或者取next时,没有判空,造成Runtime Error。2. 空指针和只有一个节点之类的边界情况。原创 2014-05-04 21:09:50 · 2285 阅读 · 11 评论 -
leetcode第一刷_Linked List Cycle
这道题不要太有名啊,有没有公司不问这道题?原创 2014-05-04 21:14:51 · 1066 阅读 · 0 评论 -
leetcode第一刷_Word Break
这种题一看,立马就会想到递归,但直接递归的代价太大了,当字典里的单词长度很小,而单词长度很长时,肯定会超时的。再仔细想一下,是不是每次递归验证都是有必要的呢?如果从i位置开始已经被验证为不行了,那么其他递归分支走到这个位置的时候就不用走了,因为肯定是死胡同。想到了打表,把不行的位置记录下来,速度显著提高。下面说一点实现的事情,记录一个位置行不行,用map最简单直接,查找速度也快。每次选择步长的原创 2014-05-04 22:00:22 · 1265 阅读 · 0 评论 -
leetcode第一刷_Word Break II
有了上个题铺垫,这个题的思路就非常简单了,原创 2014-05-04 22:09:25 · 1200 阅读 · 0 评论 -
leetcode第一刷_Candy
这道题我觉得题目说的不是很明白,应该再具体举几个列子说明一下的,让我这英语渣渣的人理解偏了。。题目的意思是,当rate比他旁边的人大时,拿的糖一定要比他多,这并不代表一样rate的人,拿到的糖要一样多。我一开始以为同样rate的人必须保证公平,思想太共产主义了。那样我的想法是按rate排名,一层一层的更新。。这个题的解法就简单多了,应该是最直接的打表。先从左往右扫一遍,如果当前小朋友rat原创 2014-05-04 23:07:07 · 1357 阅读 · 0 评论 -
leetcode第一刷_Linked List Cycle II
这道题稍微有点意思,知道答案发现,呀,这么简单就能做啊。我一开始想的是,相遇之后用另一个指针怎么走,然后满足什么关系之后能推出来,其实不用这么麻烦。是很简单的数学关系,我画个图说一下。S1代表的是链表进入环之前的长度,a代表当两个指针相遇时,走一步的指针在环里走的长度,S2代表的是环的周长,那么根据条件,相遇时,走两步的指针走的距离是走一步的两倍,我们得到公式:(S1+a)*2 =原创 2014-05-04 21:36:46 · 1272 阅读 · 0 评论 -
leetcode第一刷_Single Number II
其他出现两次,只有一个出现一次的那道题我就不更了,直接抑或,最后的结果就是那个数。为什么可以这样做呢?因为一个32位int,如果所有数都出现了两次,那么为1的那些位统计的个数一定是2的倍数,抑或之后全变成0。一个数出现了一次,它为1的那些位上,1的个数必定是奇数,抑或之后一定还是1。我之前知道出现两次这个题的解法,但是理解的不够深,以为抑或是关键,其实不是,出现了偶数次才是关键。理解了这点,推原创 2014-05-04 22:49:44 · 1278 阅读 · 0 评论 -
leetcode第一刷_Gas Station
刚看到这个题时,觉得跟之前看到过的一个小猫钓鱼的题目很像,虽然具体的记不太清楚了,不过那个题用的应该是贪心,在惯性思维的驱使下,这个题的题意一开始又理解错了。。此题要求的是“走一圈回到原点”,即从位置i开始,最后还要回到i,而不是设计一个路线,踩完所有的点,使剩余的油量最大。一个更明显的条件是,题目只给出了从i到i+1的,没告诉你从i+1到i是多少,这种路线对称消耗就一样的假设完全我自己想象的。原创 2014-05-05 09:33:17 · 1481 阅读 · 0 评论 -
leetcode第一刷_Copy List with Random Pointer
这道题应该是链表中少有的几道原创 2014-05-05 09:42:24 · 1040 阅读 · 0 评论 -
leetcode第一刷_Clone Graph
这道题相当的恶心,写了好多遍,最后的结果也不满意,原创 2014-05-05 09:57:10 · 1161 阅读 · 0 评论 -
烙饼排序的实现
真是个有意思的题目,烙饼,lb,鲁滨,哈哈。决定下个11账号就叫 烙饼_刘 了。书上的思路其实很简单,用了状态空间搜索里面最常见的分支限界法,用循环和递归穷举所有可能的情况,然后约束上界和下界来进行剪枝。上界越小,下界越大,剪枝效果越好。接口如下:class Lbsort{ public: Lbsort():m_laobings(0), m_pCount(0), m_swapInfo原创 2014-04-03 11:43:11 · 1293 阅读 · 1 评论 -
leetcode第一刷_Reverse Words in a String
这道题非常常见,在primer上甚至有现成的详细代码。主要的原创 2014-04-19 10:05:58 · 1105 阅读 · 0 评论 -
leetcode第一刷_Sort List
这道题其实是道数据结构的题,跟链表相关的问题一般都比较直接,但是比较原创 2014-04-19 10:46:54 · 1092 阅读 · 0 评论 -
leetcode第一刷_Palindrome Partitioning
仍然是一个递归加记录路径的题目原创 2014-05-05 13:59:40 · 1143 阅读 · 0 评论 -
leetcode第一刷_ Palindrome Partitioning II
这道题还挺复杂的,回来看了好一会儿才想起当时怎么想的。。上道题刚说不要打表,这道题就用了打表。。总的思路是这样的,从后面往前面打表,最后一个位置的最小分割一定是0,那往前呢,如果当前考虑的位置是start,并且substr(s, i)是回文的,那么如果已知i+1开始的分割次数,那么start这个位置的分割应该就是start原来的和i+1开始的分割次数加1之间的最小值。DP的思想,很直接。但原创 2014-05-05 20:47:54 · 1318 阅读 · 0 评论 -
leetcode第一刷_Sum Root to Leaf Numbers
有关树的问题还是比较简单的,递归递归递归,递归一万年。不,你说还有,遍历遍历遍历,遍历一万年,哈哈。一般的问题借助前中后层序都可以比较优雅的解决掉,遍历的时候常用递归,如果层序,可能需要借助队列。这道题其实没什么好说的,父亲们在构成的数字中位数靠前,一定是先序遍历嘛,到达叶子更新一下总和。这里说实验室一个同学面试遇到的更有意思的问题,也是树的。已知树上两个节点有祖先和后辈的关系,怎样只用一次遍原创 2014-05-05 21:03:58 · 1317 阅读 · 0 评论 -
leetcode第一刷_Longest Consecutive Sequence
给你一个数组,O(N)时间找出某些个数,这些题如果没见过,还真不是很好想。做了这些题,我觉得有下面两个个比较常见的思路:1. 用两个指针,可以从一边开始,走某个距离停止,也可能是一头一尾两个指针,定义一种大小关系,他俩比较之后移动,直到相遇。2. 用其他的辅助的数据结构,可能是hash表,可能是map,可能是栈或者队列。这种通常用在访问了现在的不能确定他们是不是有用,是不是能影响最后的结果原创 2014-05-05 21:20:43 · 1255 阅读 · 0 评论 -
leetcode第一刷_Word Ladder
这道题思路不难,本质就是BFS嘛,从一个单词开始,他的下一层是所有可以一步变到,且从来没变到过得那些string。问题是怎样确定这些可以变到的string呢?有两个条件,一,只能通过上一层的string变化一个数字得到,二,变化之后单词必须在字典中。注意是变化一个字母得到,而不是编辑距离是1,要么就复杂了,情况多了好多好多。我最开始的思路是建个map,保存所有从开始单词能变化到得单词及这些单词原创 2014-05-05 21:35:20 · 1330 阅读 · 0 评论 -
leetcode第一刷_Valid Palindrome
水题。只要注意一点,题目写的是alphanumeric,包括了数字hen原创 2014-05-05 21:38:12 · 1062 阅读 · 0 评论 -
leetcode第一刷_Binary Tree Maximum Path Sum
这是道好题。原创 2014-05-05 22:04:58 · 1239 阅读 · 0 评论 -
leetcode第一刷_Two sum
非常经典的一道题,如果数字有序的话,非常简单的就能想到一个原创 2014-04-19 21:41:11 · 1141 阅读 · 0 评论 -
leetcode第一刷_Evaluate Reverse Polish Notation
逆波兰表达式在本科时的编译原理有学到过,一看到它,我总是想到栈,这道题我也是这样解的。原创 2014-04-19 10:18:18 · 1156 阅读 · 0 评论 -
leetcode第一刷_Binary Tree Preorder Traversal
先序遍历就比较单纯一些了原创 2014-04-19 20:59:21 · 1057 阅读 · 0 评论 -
leetcode第一刷_Insertion Sort List
对链表的插入排序还是比较简单的,原创 2014-04-19 20:03:35 · 1059 阅读 · 0 评论 -
leetcode第一刷_LRU Cache
一直觉得跟操作系统有关的东西还是挺难的。LRU,即最近最少原创 2014-04-19 20:35:10 · 1136 阅读 · 0 评论 -
leetcode第一刷_Binary Tree Postorder Traversal
树的结构决定了有关他的原创 2014-04-19 20:48:01 · 1103 阅读 · 0 评论 -
leetcode第一刷_Add Two Numbers
链表的问题又是那样的纯粹和麻烦。两个链表相加,原创 2014-04-20 10:23:19 · 1062 阅读 · 0 评论