算法竞赛入门经典-第2版
youth.lin
a tyro at CS and NLP.
展开
-
《算法竞赛入门经典》习题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 · 2719 阅读 · 3 评论 -
九度OJ 1118 数制转换(a进制 -> b进制)
原题地址http://ac.jobdu.com/problem.php?pid=1118 输入a进制数n,转为对应b进制的数。解题思路一道水题。 进制转换的问题以前大一学C语言的时候就做过,这道题目比较简单,a和b都在2~16以内,很常规,不需要更多的字母来表示(还记得以前做过一道26进制内的,当时做了很久哈)遇到两个数进制转换的问题,一般采取的办法都是:先将源进制的数转为中间的十进制数,再原创 2017-04-24 22:35:44 · 540 阅读 · 0 评论 -
UVa 10391 Compound Words(字符串+查找)
原题地址https://vjudge.net/problem/UVA-10391 按照字典序输入一个词典,输出其中所有的复合词。复合词是指可以由字典中任意两个不同的单词组合而成的词,比如new+born=newborn解题思路本题是《算法竞赛入门经典》的习题5-5,一道水题,但是需要一点小技巧。最直接想到的是一个O(n^2)的遍历,看每对字符串拼接后的词是否在原来的词典里,但是由于n有1200原创 2017-04-23 11:28:43 · 332 阅读 · 0 评论 -
UVa 1594 Ducci Sequence(模拟+查重)
原题地址https://vjudge.net/problem/UVA-1594 题意:对一个n元组(a1, a2, … an),可以对于每个数求出它和下一个数的差的绝对值,得到一个新的n元组(|a1-a2|,|a2-a3|…|an-a1|),重复这个过程,得到的序列成为Ducci序列。 例如(8, 11, 2, 7) → (3, 9, 5, 1) → (6, 4, 4, 2) → (2,原创 2017-04-22 22:05:51 · 555 阅读 · 0 评论 -
UVa 400 Unix ls(排序+输出控制)
原题地址https://vjudge.net/problem/UVA-400 给定n个代表文件名的字符串,按字典序排序,再按列优先输出,每行最多输出60个字符,要求输出的行数最少。(最后一列的列宽为最大字符串长度max_len,其余列的列宽为max_len+2个字符)解题思路本题是《算法竞赛入门经典》的习题5-1,是排序的水题。要使输出的行数最少,那么每一行就要尽可能输出60个字符,但是由于列原创 2017-04-16 22:49:04 · 486 阅读 · 0 评论 -
UVa 815 Flooding!(排序)
原题地址https://vjudge.net/problem/UVA-815 题意:有一个n*m的方格,每个格子的底面都是边长为10的正方形,整个区域外看作无限高的墙壁。输入每个格子的海拔高度,以及区域内的雨水总体积,输出区域水位的海拔高度以及淹没方格的占比。解题思路本题是《算法竞赛入门经典》的习题4-10,这一章前面几道习题都比较复杂,为了照顾到后面的进度,先跳过啦。刚开始没有读懂题意,后来原创 2017-04-15 20:26:18 · 419 阅读 · 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 · 339 阅读 · 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 · 305 阅读 · 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 · 328 阅读 · 0 评论 -
UVa 232 Crossword Answers(枚举+输入输出)
原题地址https://vjudge.net/problem/UVA-232 题意:输入r行c列的网格,黑格用 ‘*’ 表示, 每个白格上都填有一个字母。如果一个白格的左邻或上邻位置没有白格(黑格或越界),则称该白格是一个起始格。 首先将所有起始格按照从上到下,从左到右的顺序编号1,2,3…… 接下来找出所有的横向单词(从一个无左邻的起始格开始,向右延伸至黑格或边界),再找出所有的纵原创 2017-04-13 14:36:29 · 332 阅读 · 0 评论 -
UVa 227 Puzzle(小心输入输出!)
原题地址https://vjudge.net/problem/UVA-227 题意如图 解题思路本题是《算法竞赛入门经典》的习题3-5,题目本身非常简单,但是设了很多坑爹的陷阱,包括数据的输入、指令的输入、结果的输出,估计就是它主要的考点。根据每个指令决定移动哪个行列位置的格子,当要移动的某个格子越界时则该指令非法。总结一下我踩过的坑:输入: 由于该二维字符数组含空格,而 scan原创 2017-04-12 21:04:05 · 1851 阅读 · 3 评论 -
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 · 259 阅读 · 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 · 385 阅读 · 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 · 1690 阅读 · 0 评论 -
UVa 401 Palindromes(常量数组+遍历)
原题地址https://vjudge.net/problem/UVA-401 题意:判断输入的字符串是否满足回文、镜像。 回文即从左往右读和从右往左读的序列一样,镜像即可以通过翻转规则从一个字符变成另一个字符,如(3,E),(J-L)等。 解题思路本题是《算法竞赛入门经典》的例题3-3,题目很简单,值得注意的是常量数组的妙用。判断回文串很简单,只要遍历字符串,判断字符str[i]原创 2017-04-10 20:14:10 · 356 阅读 · 0 评论 -
UVa 1583 Digit Generator(枚举+打表)
原题地址https://vjudge.net/problem/UVA-1583 定义数字x加上x的各位数字之和得到y,称x是y的生成元。一个数可能存在多个生成元,求给定数字n最小的生成元。解题思路这道题的题意很清楚,也很简单。需要注意的是通过打表做预处理,事先计算好每个数字的最小生成元。通过遍历1-100000内的所有数字,计算它作为生成元可能构成的大数并标记之。由于遍历是从小到大的,所以如果原创 2017-04-10 22:10:29 · 251 阅读 · 0 评论 -
《算法竞赛入门经典》习题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 · 2731 阅读 · 2 评论 -
STL 例题
一些关于STL数据结构、函数使用的例题。原创 2017-04-16 12:55:48 · 2050 阅读 · 2 评论