
算法竞赛入门经典(第2版)
文章平均质量分 76
ramay7
Life is not short,but float.
展开
-
UVa 232 Crossword Answers (纵横字谜的答案)
题意:白格:该位置字符是字母;黑格:该位置字符是'*';起始格:一个白格的左边相邻位置或者上边相邻为之没有白格(可能是黑格或超出网格边界);把起始格按照从上到下、从左到右顺序编号(1,2,3,4...)横向单词(Across):从起始格开始且前一个不是白格,一直向右直到遇到黑格或除了边界。竖向单词(Down):从起始格开始且上一个不是白格,一直向下直到遇到黑格或除了边界。输原创 2015-12-13 12:16:20 · 1924 阅读 · 0 评论 -
UVa 12108 Extraordinarily Tired Students(特别困的学生)
题意:每个学生(1给出n个学生的清醒周期和睡觉周期以及初始时刻处于周期的时刻,判断什么时刻全班同学都清醒着,如果不存在这样的时刻,那么就输出-1.分析:只需要计算每个时刻全班的清醒人数和睡觉人数:更新每位同学的状态。然后判断是否awake人数==n即可。完全模拟!难点:①对每个学生每个时刻参量的描述,可用结构体!②每个时刻的状态判断③大的循环原创 2015-12-19 11:57:13 · 1249 阅读 · 0 评论 -
UVa 201 Squares(正方形)
题意:有n行n列(2行从上到下编号为1~n,列从左到右编号为1~n。边用H i j和V i j表示,分别代表(i,j)-(i,j+1)和(i,j)-(i+1,j)。思路:读入的时候,先对每个点是否存在先左或向下的边做标记。然后统计从这点开始向左和向下的最大边长。如果要判断是否存在以(i,j)为左上顶点的边长为len的正方形,只需要判断以(i,j)为起点向左和向下的最大边长,原创 2015-12-20 08:51:13 · 1248 阅读 · 0 评论 -
UVa 1590 IP Networks (IP网络)
题意:子网掩码是子网划分的依据,它跟IP地址一样,长度也是32位,点分十进制表示,每部分0~255,但是跟IP地址不同的是,子网掩码只能由连续的1和0组成,也就是说,把这32位从任意位置分开,左边只能全是1,右边只能全是0。比如11111111.11111111.11111111.11111000(255.255.255.248)就是合法的子网掩码,而11000000.10101000.0原创 2015-12-18 21:02:59 · 895 阅读 · 0 评论 -
UVa 815 Flooded! (洪水)
题意:一个n*m的方格区域,共有n*m个方格,每个方格是边长为10米的正方形,整个区域的外围是无限高的高墙,给出这n*m个方格的初始高度,和洪水的总体积,计算灌入洪水后这个方格区域的水面高度,以及洪水淹没比例。分析:淹没肯定是从高度最低的方格就开始的,所以先将n*m个方格从小到大排序。如果洪水要想淹没下一个方格,那么剩余洪水的体积必须>=已经淹没方格的面积*已经淹没方格的数量,原创 2015-12-18 11:06:05 · 2410 阅读 · 0 评论 -
UVa 10976 Fractions Again?!(分数拆分)
题目链接:UVa 10976题意:输入一个正整数k,找到所有的正整数x>y,使得1/k=1/x+1/y。CODE:#include #include #include #include #include #include using namespace std;int x[10010], y[10010], k, cnt;int main(){#if原创 2015-12-30 21:58:49 · 532 阅读 · 0 评论 -
UVa 11509 Maximum Product(最大乘积)
题目链接:UVa 11509题意:输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0(表示无解)。1分析:两层循环对每个s[i]求最大连续子序列乘积,逐个取最大即可。注意:C++中 long long 不能用%I64d输出。CODE:#include #include #include #原创 2015-12-30 21:56:44 · 610 阅读 · 0 评论 -
UVa 725 Division(除法)
题目链接:UVa 725题意:输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2分析:暴力枚举。5个for循环,然后检验即可。CODE:#include #include #include #include #include #include using namespac原创 2015-12-30 21:33:11 · 541 阅读 · 0 评论 -
习题2-6 排列(permutation)
用1,2,3,...,9组成3个三位数abc, def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。按照"abc def ghi"的格式输出所有解,每行一个解。提示:不必太动脑筋。//2-6 version 1#include #include int main(){ int x,y,z,a[10],i,s; memset(a,0,sizeof原创 2015-11-27 15:29:56 · 2551 阅读 · 5 评论 -
UVa 11809 Floating-Point Numbers (浮点数)
题意:先介绍了浮点数的存储---用二进制数存储。浮点数(n)由尾数(mantissa)和阶码(exponent)组成。假设尾数和阶码的位数分别为M和E。按从左至右的顺序,首先是尾数的符号位(0代表正数,1代表负数),接下来是M位尾数部分,由于存储时尾数部分值一定是属于区间[0.5,1),所以M位尾数部分的第一位也就是整体的第二位一定是1。当M位尾数存储完了,第M+1位是阶码的符号位(0代表正数原创 2015-12-15 09:13:21 · 951 阅读 · 0 评论 -
习题2-5 分数化小数(decimal)
输入正整数a, b, c,输出a/b的小数形式,精确到小数点后c位。a, b 样例输入:16 400 0样例输出:Case 1:0.1667//*version 1 未考虑double型数据的有效数字只有15-16位#include int main(){ int a,b,c,count=1; while(scanf("%d%d%d",&a原创 2015-11-27 15:03:15 · 1371 阅读 · 0 评论 -
UVa 1588 Kickdown (换低档装置)
题意:给两个长条,长条上一列一列顺序排列,且每列高度只为1或2,将这两个长条‘嵌套“,每列总高度不得超过3,问最终形成的新长条最短有多长?思路:可以将一个长条s1看成固定,另外一个s2依次后移寻找能否嵌套,如果从头至尾扫描s2都符合高度不超过三,那就成功了,否则将s2的起始扫描位置后移。具体可见代码。注意:题目中有这么一句话!The sectionscan not be fli原创 2015-12-14 12:36:31 · 979 阅读 · 2 评论 -
UVa 202 - Repeating Decimals
思路:考虑n/m的余数和除法过程,显然整个过程的余数范围是[0,m-1],所以最多除m次,所得到的余数中一定有两个重复的,余数重复了就意味着下一次除和之前重复的余数除所得的余数又是一样的,所以会出现循环。可以用数组a[m]来保存余数,先初始化为0,每出现一个余数t先判断a[t]是否为1,若为1则循环出现,退出当前循环,否则赋值a[t]为1.用b[50]来保存n/m的整数部分,每次将n更原创 2015-12-13 09:16:34 · 405 阅读 · 0 评论 -
UVa 679 Droppintg Balls (小球下落)
题目链接:UVa 679题意:有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有的结点从上到下从左到右编号为1,2,3,...,2^D-1。在结点1处放一个小球,它会往下落。每个内结点都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,状态都会改变。当小球到达一个结点时,如果该结点上的开关关闭,则往左走,否则往右走,直到走到叶子结点。输入叶子深度D和小球个数I,输出第I个小原创 2015-12-28 15:50:55 · 656 阅读 · 0 评论 -
UVa 1587 Box (判断长方体)
题意:给出六个矩形的长和宽,判断这六个矩形能不能构成长方体。思路:符合条件的情况只有三种:①只出现一种数字②出现两种数字一种出现4次一种出现8次6个矩形中有2个正方形,剩下4个是相同的矩形四个相同的矩形即意味着长宽不等③出现三种数字且每种都只出现4次每种数字都出现了4次每个矩形都长宽不等第一次,只考虑了两种情况(一种数字或三种原创 2015-12-13 19:06:52 · 1112 阅读 · 0 评论 -
UVa 1368 DNA Consensus String (DNA序列)
题意:给一些DNA序列(字符串只包含ACGT四种字母),求一个与这些DNA序列Hamming距离和最小的字符串,如果有多个这种字符串则输出字典序最小的那个,并求出最小Hamming距离和。两个等长字符串的Hamming距离等于字符不同的位置的个数。例如:ACGT和GCAT的Hamming距离是2.(左数第1,4个字符不同)思路:具体到每个位置考虑。最终的字符串在每个位置上的字母原创 2015-12-13 14:19:54 · 659 阅读 · 0 评论 -
UVa 253 Cube painting (骰子涂色)
题意:给两个骰子,每枚骰子每个面由红(red),蓝(blue),绿(green)三种颜色之一染色,可以把每枚骰子按照图示方式编号,然后按照编号给出颜色顺序,问这两枚骰子能否通过旋转变成展示的颜色相对位置一致?思路:可以将一枚骰子的颜色顺序不变,将另一枚旋转,看旋转过程中是否有颜色完全重合的情况。旋转时,每个面都可以在编号1的位置,这有6种选择,而当编号1位置的面确定了,那么原创 2015-12-19 09:53:58 · 3516 阅读 · 0 评论