
算法与数据结构
youth.lin
a tyro at CS and NLP.
展开
-
九度OJ 1061 成绩排序(结构体排序)
原题地址:http://ac.jobdu.com/problem.php?pid=1061题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。输入: 测试数据有多组,每组输入第一行有一个整数N(N 每个学生的数据包括姓名(长度不原创 2017-03-23 20:49:13 · 737 阅读 · 0 评论 -
九度OJ 1023 EXCEL排序(结构体排序)
原题地址:http://ac.jobdu.com/problem.php?pid=1023题目描述: Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。 对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序原创 2017-03-23 21:53:07 · 382 阅读 · 0 评论 -
九度OJ 1096 日期差值
原题地址:http://ac.jobdu.com/problem.php?pid=1096题目描述:有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天输入:有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD输出:每组数据输出一行,即日期差值样例输入:2011041220110原创 2017-03-23 22:13:47 · 483 阅读 · 0 评论 -
九度OJ 1043 Day of Week
原题地址:http://ac.jobdu.com/problem.php?pid=1043题目描述:We now use the Gregorian style of dating in Russia. The leap years are years with number divisible by 4 but not divisible by 100, or divisible by原创 2017-03-25 09:48:50 · 327 阅读 · 0 评论 -
九度OJ 1156 谁是你的潜在朋友(哈希+计数)
原题地址:http://ac.jobdu.com/problem.php?pid=1156题目描述: “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。 首先你对借阅记原创 2017-03-25 10:41:29 · 843 阅读 · 0 评论 -
九度OJ 1069 查找学生信息(二分查找)
原题地址:http://ac.jobdu.com/problem.php?pid=1069题目描述: 输入N个学生的信息,然后进行查询。输入: 输入的第一行为N,即学生的个数(N接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M0203原创 2017-03-25 20:30:32 · 469 阅读 · 0 评论 -
九度OJ 1433 FatMouse(贪心)
原题地址:http://ac.jobdu.com/problem.php?pid=1433题目描述:FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.The wareh原创 2017-03-25 21:25:48 · 326 阅读 · 0 评论 -
九度OJ 1434 今年暑假不AC(贪心+区间调度)
原题地址:http://ac.jobdu.com/problem.php?pid=1434题目描述:“今年暑假不AC?”“是的。”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永原创 2017-03-25 21:59:42 · 609 阅读 · 0 评论 -
九度OJ 1153 括号匹配问题(栈的应用)
原题地址:http://ac.jobdu.com/problem.php?pid=1153题目描述: 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配原创 2017-03-26 10:13:58 · 634 阅读 · 0 评论 -
九度OJ 1019 简单计算器(栈的应用)
原题地址:http://ac.jobdu.com/problem.php?pid=1019题目描述: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。输入: 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。原创 2017-03-26 10:53:45 · 710 阅读 · 0 评论 -
九度OJ 1101 表达式求值(栈的应用)
原题地址:http://ac.jobdu.com/problem.php?pid=1101题目描述:对于一个不存在括号的表达式进行计算输入:存在多种数据,每组数据一行,表达式不存在空格输出:输出结果样例输入:6/2+3+3*4样例输出:18来源:2010年上海交通大学计算机研究生机试真题原创 2017-03-26 15:43:38 · 790 阅读 · 0 评论 -
九度OJ 1078 二叉树遍历(已知前中序求后序)
原题地址:http://ac.jobdu.com/problem.php?pid=1078题目描述:二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中原创 2017-03-26 16:49:15 · 393 阅读 · 0 评论 -
九度OJ 1113 二叉树(完全二叉树)
原题地址:http://ac.jobdu.com/problem.php?pid=1113 (由于原始版面的排版实在有些不好看,所以就不贴过来啦。优快云旧版的编辑器适应不了,这次尝试用markdown写) 题意:给定一棵共有节点数为n的完全二叉树,对它每一层的节点从左到右编号,第一层为1,第二层为2、3,第三层为4、5、6、7……然后输入一个编号m,求以m为根的子树下共有多少节点。原创 2017-03-26 20:49:57 · 467 阅读 · 0 评论 -
九度OJ 1009 二叉搜索树
原题地址:http://ac.jobdu.com/problem.php?pid=1009题意:判断两输入序列是否为同一棵二叉搜索树序列。解题思路复习一下二叉搜索树(BST)的定义:对于树上的任意一个节点,其上的数值必大于等于其左子树上任意节点的数值,必小于等于其右子树上任意节点的数值。即左子树。二叉搜索树的建立:通过每次向树中插入数字x来构造这棵树,如果当前树根为空,原创 2017-03-26 22:59:47 · 392 阅读 · 1 评论 -
POJ 2159 Ancient Cipher(字符串排列替换)
原题地址:http://poj.org/problem?id=2159 题意:古罗马采用一种混合替换、排列的方法对明文加密(替换即将一个字符替换为另外一种字符,不同字符替换后的字符各不相同;排列即打乱字符的先后顺序),给定一串密文和一串明文,判断这串密文是否可能表示这串明文。解题思路题目中只是解释了替换和排列的定义,但没有给出具体的替换规则和排列规则,因此这两种规则执行的先后顺序,以及执行的规原创 2017-03-27 18:07:27 · 519 阅读 · 0 评论 -
POJ 2739 Sum of Consecutive Prime Numbers(素数表的应用)
原题地址http://poj.org/problem?id=2739 题意:某些数字可以由连续几个素数的和表示,给定一个数字,求其有几种这样的表示方法。例:41=2+3+5+7+11+13 或 41=11+13+17解题思路素数表既然要判断某个数能否表示为连续的素数和,那么首先就要知道如何求素数。 素数是数论和离散数学里非常重要的一部分,这里就如何用“筛法”得到n之内的素数表作总结(参考了以原创 2017-03-28 21:48:02 · 312 阅读 · 0 评论 -
POJ 1083 Moving Tables(区间+计数)
原题地址:http://poj.org/problem?id=1083 题意:一条长廊的北边南边有编号从1到400的200个房间(分单双号),把一张桌子从房间m搬到房间n需要占用m、n之间的所有走廊(包括房间前的走廊),耗时为10分钟,给定所有需要搬动的(m,n)对,求尽可能同时移动桌子的情况下的最短耗时。 解题思路刚开始读题以为是区间重叠的问题,画了很多线段想解法,最后觉得还是没有想到原创 2017-03-29 10:21:21 · 246 阅读 · 0 评论 -
POJ 2586 Y2K Accounting Bug(贪心+枚举)
原题地址http://poj.org/problem?id=2586 题意:已知每个月的经营状况要么盈利s,要么亏损d,若每五个月的汇总都是亏损,求这一年12个月最大盈利额(不能盈利则输出Deficit)。解题思路这道题被划分到贪心的题库里,但是其实不用花时间在贪心算法的设计上。最直观的贪心思路就是,为了使每5个月亏损且总和盈利,那就要利用相邻的5个月的重叠部分,将亏损的月份放在这些部分且使每原创 2017-04-07 14:28:49 · 362 阅读 · 0 评论 -
POJ 3069 Saruman's Army(贪心+区间覆盖)
原题地址http://poj.org/problem?id=3069 题意:X轴上有n个点Xi,雷达必须被放置在点上,且能探测与其距离为R内的所有点,求能覆盖所有点的最少雷达数。解题思路这题属于贪心算法的题目,很明显也是区间覆盖问题。我也是愚蠢到极致了,才会想着记录每个点的R范围内的邻居数,对邻居数降序排,在邻居数最多的点上放雷达。浪费了一个半小时,数组套数组,还是WA,debug失败只能参考原创 2017-04-07 21:00:35 · 474 阅读 · 2 评论 -
POJ 1753 Flip Game(枚举+状态压缩BFS)
原题地址http://poj.org/problem?id=1753 题意:十六宫格的棋盘,每个棋子有黑白两面,已知翻转某个棋子会造成其四周(若存在)的棋子都翻转。给定一个棋面,计算最少需要多少次能使整个棋盘的棋子全黑或全白。解题思路声明:本题的算法不是我自己的思路,学习了大神的方法,觉得是一种非常好的处理简单状态变迁的枚举问题,在这里做下笔记今后可以复习:太长不看版用16个二进制位来代表每个原创 2017-03-30 23:13:15 · 585 阅读 · 0 评论 -
POJ 2965 The Pilots Brothers' refrigerator(枚举+DFS)
原题地址http://poj.org/problem?id=2965 给定4*4矩阵,每个方格为’+’或’-‘,对每个方格状态的翻转都会引起所在行、所在列其它方格的翻转,求最小的翻转次数和翻转序列,使得所有方格都为’-‘。解题思路本题与前一篇博文《POJ 1753 Flip Game》的题目非常像,都是枚举相关的题目。在POJ 1753里用到了状态压缩的方法,状态压缩的核心思想就是用二进制位来原创 2017-04-05 14:12:25 · 299 阅读 · 0 评论 -
POJ 1328 Radar Installation(贪心+区间覆盖)
原题地址:http://poj.org/problem?id=1328 题意:将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量。原创 2017-04-05 20:29:57 · 331 阅读 · 0 评论 -
POJ 2109 Power of Cryptography(简单计算)
原题地址:http://poj.org/problem?id=2109 已知kn=p,给定n和p,求k。解题思路不知道目录里这道题为什么被分到贪心算法??? 刚看到题目,被题目的p的范围10^101吓到,以为要用高精度整数+二分来求p的n次根。 但是注意到double的数值范围是[-1.7*10^308, +1.7*10^308],远大于10^101;double有效精度为15-16位,题原创 2017-04-05 22:02:44 · 269 阅读 · 0 评论 -
《算法竞赛入门经典》习题2-5 分数化小数(Decimal)
原题 题意:输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。其中a,b ≤ 106, c≤100。输入包含多组数据,结束标记为a=b=c=0。 测试数据: 样例输入: 1 6 4 0 0 0 样例输出: Case 1: 0.1667解题思路这道题是整数取整、取余的练习题。本以为可以直接用C++的setprecision(c)解原创 2017-04-08 20:26:25 · 2769 阅读 · 3 评论 -
《算法竞赛入门经典》习题2-6 三位数排列
原题 题意:用1,2,3,……9组成3个三位数 abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。 按照”abc def ghi”的格式输出所有解,每行一个解。解题思路这道题也是整数拆分、取整取余问题的基础练习。关键信息在于“比例=1:2:3”和“都使用一次”。用visit数组标记每个数字是否出现过枚举(abc, def, ghi)可能的取值,将a原创 2017-04-08 21:22:41 · 2775 阅读 · 2 评论 -
UVa 1583 Digit Generator(枚举+打表)
原题地址https://vjudge.net/problem/UVA-1583 定义数字x加上x的各位数字之和得到y,称x是y的生成元。一个数可能存在多个生成元,求给定数字n最小的生成元。解题思路这道题的题意很清楚,也很简单。需要注意的是通过打表做预处理,事先计算好每个数字的最小生成元。通过遍历1-100000内的所有数字,计算它作为生成元可能构成的大数并标记之。由于遍历是从小到大的,所以如果原创 2017-04-10 22:10:29 · 272 阅读 · 0 评论 -
UVa 401 Palindromes(常量数组+遍历)
原题地址https://vjudge.net/problem/UVA-401 题意:判断输入的字符串是否满足回文、镜像。 回文即从左往右读和从右往左读的序列一样,镜像即可以通过翻转规则从一个字符变成另一个字符,如(3,E),(J-L)等。 解题思路本题是《算法竞赛入门经典》的例题3-3,题目很简单,值得注意的是常量数组的妙用。判断回文串很简单,只要遍历字符串,判断字符str[i]原创 2017-04-10 20:14:10 · 375 阅读 · 0 评论 -
UVa Master-Mind Hints(猜数字+计数)
原题地址https://vjudge.net/problem/UVA-340 题意:猜数字游戏。给定答案序列和猜测序列,统计有多少数字正确(A),多少数字在两个序列中都出现过但位置不对应(B)。解题思路本题是《算法竞赛入门经典》的例题3-4,原题的英文题目很复杂,但是玩过猜数字的都知道是什么意思 :)猜测不限次数,输入0 0 0 0结束这轮猜测;判断A非常简单,直接统计guess[i] =原创 2017-04-10 21:21:08 · 1763 阅读 · 0 评论 -
UVa 1585 Score / 1586 Molar Mass(遍历+计数)
原题地址https://vjudge.net/problem/UVA-1585 题意:给定由O和X组成的串,统计得分。每个O的得分为目前连续出现的O的个数,X得分为0,如OOXXOXXOOO=1+2+0+0+1+0+0+1+2+3=10。解题思路本题是《算法竞赛入门经典》的习题3-1,大水题。遍历输入字符串,用seq记录目前连续出现的O的个数,seq=0代表没有遇到O。遇到O则按照规则累加,遇原创 2017-04-11 19:50:01 · 406 阅读 · 0 评论 -
UVa 1584 Circular Sequence / 455 Periodic Strings(枚举字符串)
原题地址https://vjudge.net/problem/UVA-1584 题意:DNA的四个字母CGAT排列成环形,可以移动起点,输出字典序最小的环形序列(顺时针)。解题思路这道题是《算法竞赛入门经典》的例题3-6,是一道水题。给定两个起始位置,函数needSwap完成以下任务:遍历这两个起始位置开始的环形序列中的每个字符,如果在某个字符上,新起点比之前维护的起点min_index的字典原创 2017-04-11 19:23:21 · 275 阅读 · 0 评论 -
UVa 227 Puzzle(小心输入输出!)
原题地址https://vjudge.net/problem/UVA-227 题意如图 解题思路本题是《算法竞赛入门经典》的习题3-5,题目本身非常简单,但是设了很多坑爹的陷阱,包括数据的输入、指令的输入、结果的输出,估计就是它主要的考点。根据每个指令决定移动哪个行列位置的格子,当要移动的某个格子越界时则该指令非法。总结一下我踩过的坑:输入: 由于该二维字符数组含空格,而 scan原创 2017-04-12 21:04:05 · 1913 阅读 · 3 评论 -
UVa 232 Crossword Answers(枚举+输入输出)
原题地址https://vjudge.net/problem/UVA-232 题意:输入r行c列的网格,黑格用 ‘*’ 表示, 每个白格上都填有一个字母。如果一个白格的左邻或上邻位置没有白格(黑格或越界),则称该白格是一个起始格。 首先将所有起始格按照从上到下,从左到右的顺序编号1,2,3…… 接下来找出所有的横向单词(从一个无左邻的起始格开始,向右延伸至黑格或边界),再找出所有的纵原创 2017-04-13 14:36:29 · 354 阅读 · 0 评论 -
UVa 1368 DNA Consensus String(贪心+计数)
原题地址https://vjudge.net/problem/UVA-1368 题意:定义两个等长字符串的Hamming距离等于字符不同的位置个数。例如ACGT和GCGA的Hamming距离为2。(A-G和T-A不同)。 输入m个长度均为n的DNA序列(只含A、C、T、G),求解一个DNA序列,使得该序列到这m个序列的总Hamming距离之和最小。 如果存在多个这样的DNA序列,求字原创 2017-04-13 16:37:45 · 359 阅读 · 0 评论 -
UVa 202 Repeating Decimals(模拟+哈希)
原题地址https://vjudge.net/problem/UVA-202 给出两个数n,m,0<=n,m<=3000,输出n/m的循环小数表示以及循环节长度。解题思路本题是《算法竞赛入门经典》的习题3-7,思路容易想到,实现起来有些细节和边界需要考虑。不难想到,小数点后循环节的产生是因为计算时的某个余数重复出现,这之后的计算会重复上一次这个余数出现时直到当前位置的结果。因此关键在于找到这个原创 2017-04-13 23:09:23 · 330 阅读 · 0 评论 -
POJ 3617 Best Cow Line(贪心+最小字典序)
原题地址http://poj.org/problem?id=3617 题意:给定长度为N的字符串S,构造一个新的长度为N的字符串T,使得T的字典序最小。(构造时要么从S的头部删除一个字符加到T的尾部,要么从S的尾部删除一个字符加到T的尾部)解题思路本题是简单的贪心算法的题目。每次观察S最左、最右两端的字符,取较小的字符,如果两端的字符相同,则从两侧同时向中间查看,直到找到一个能比较出大小的字符原创 2017-04-28 09:44:29 · 463 阅读 · 0 评论 -
UVa 1592 Database(枚举+字符串查重)
原题地址https://vjudge.net/problem/UVA-1592 题意:给定一个数据库的n行和m列,判断是否存在两个不同列c1、c2,使得这两个列下有两个不同行r1、r2对应的内容都相等。即[r1][c1]=[r2][c1]且[r1][c2]==[r2][c2]。如下图的第2行、第3行和第2列、第3列。 解题思路本题是《算法竞赛入门经典》的例题5-9,是STL的综合应用题,原创 2017-04-18 19:29:24 · 363 阅读 · 0 评论 -
POJ 3624 Charm Bracelet(0-1背包的动态规划!)
原题地址:http://poj.org/problem?id=3624 0-1背包问题描述如下: 有一个容量为M的背包,和N个物品。这些物品分别有两个属性,体积w和价值v,每种物品只有一个。要求用这个背包装下价值尽可能多的物品,求该最大价值,背包可以不被装满。 因为最优解中,每个物品都有两种可能的情况,即在背包中或者不存在(背包中有0个该物品或者 1个),所以我们把这个问题称为0-1背原创 2017-04-29 21:10:10 · 579 阅读 · 0 评论 -
HDU 1114 Piggy-Bank(完全背包动态规划+变形)
原题地址http://acm.hdu.edu.cn/showproblem.php?pid=1114 题意:给定一个存钱罐的重量M,已知里面存放的货币种类可能有N种,每种货币都有重量w和金额v,求该存钱罐里存放的最少金额(存钱罐必须装满)。解题思路最近在复习背包问题,在上一题里复习了【0-1背包的动态规划】,这一题来复习完全背包的动态规划解法,但是这一题不是裸题,有两处变形。首先看完全背包的经原创 2017-04-30 17:33:55 · 414 阅读 · 0 评论 -
UVa 815 Flooding!(排序)
原题地址https://vjudge.net/problem/UVA-815 题意:有一个n*m的方格,每个格子的底面都是边长为10的正方形,整个区域外看作无限高的墙壁。输入每个格子的海拔高度,以及区域内的雨水总体积,输出区域水位的海拔高度以及淹没方格的占比。解题思路本题是《算法竞赛入门经典》的习题4-10,这一章前面几道习题都比较复杂,为了照顾到后面的进度,先跳过啦。刚开始没有读懂题意,后来原创 2017-04-15 20:26:18 · 436 阅读 · 0 评论 -
PAT 1007 Maximum Subsequence Sum(最大子串和)
原题地址https://www.patest.cn/contests/pat-a-practise/1007 求出给定数字串的最大子串和,以及这个最大子串和的首尾元素。(若有多个最大子串则取最靠左的那个)解题思路本题基本上是最大子串和的裸题,只是增加了一个输出首尾元素的要求。最大子串和描述:输入一个整数序列,求出其中连续子序列和的最大值。最大子串和几种解法:复杂度O(n^3):穷举所有可能原创 2017-05-10 19:03:21 · 1542 阅读 · 0 评论