算法竞赛入门经典2
文章平均质量分 52
ScutEthan
这个作者很懒,什么都没留下…
展开
-
例题:开灯问题
有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依次类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的等的编号。k<=n<=1000。 样例输入:7 3 样例输出:1 5 6 7分析:用a[1],a[2]…a[n]表示编号为1~n的灯是否开着。模拟这原创 2016-09-14 09:11:31 · 1853 阅读 · 0 评论 -
例题:下落的树叶
给一颗二叉树,每个节点都有一个水平位置:左子节点在它左边1个单位,右子节点在右边1个单位。从左向右输出每个垂直位置的所有节点的权值之和。如图所示,从左到右的3个位置权和分别为7,11,3。按照递归(先序)方式输入,用-1表示空树。Sample Input5 7 -1 6 -1 -1 3 -1 -18 2 9 -1 -1 6 5 -1 -1 12 -1-1 3 7 -1原创 2016-09-24 22:31:43 · 614 阅读 · 1 评论 -
例题:四分树(UVa 297)
【题目】可以用一个四分图表示一32*32的黑白图像 ,法是用根节点来表示整个图像,然后再进行等分,按照从右上角的图像开始逆时针的顺序编号,依次有四个节点,如果某子节点对应的区域是全黑或者全白,则直接用黑或者白节点来代替,如果对应的区域既有白区域,也有黑区域,则用灰节点来表示,并且为这个区域递归建树。给出两棵四分树的先序遍历,求两者合并之后(黑色部分合并),黑色像素的个数,其中p表示中间节点,f表示原创 2016-09-26 20:02:09 · 724 阅读 · 0 评论 -
例题:油田(UVa 572)
输入一个m行n列的字符矩阵,统计字符@组成多少个八连块。如果两个字符@所在的格子相邻(横竖或者对角线方向),就说他们属于同一个八连块。Sample Input 1 1 * 3 5 *@*@* **@** *@*@* Sample Output原创 2016-09-26 20:43:57 · 517 阅读 · 0 评论 -
例题:Abbott的复仇(UVa 816)
有一个最多包含9*9个交叉点的迷宫。输入起点、离开起点时的朝向和终点,求一条最短路(多解时任意输出一个即可)这个迷宫的特殊之处在于:进入一个交叉点的方向(用NEWS这四个字母分别表示北东西南,即上下左右)不同,允许出去的方向也不同。例如,12 WLF NR ER*表示交叉点(1,2)(上数第一行,左数第二列)有3个路标(字符“*”只是结束标志),如果进入交叉点时的朝向为W(即朝左),则可以左转原创 2016-09-26 22:57:04 · 792 阅读 · 0 评论 -
例题:给任务排序(UVa 10305)
假设有n个变量,还有m个二元组(u,v),分别表示变量u小于v。那么,所有变量从小到大排列起来应该是什么样子呢?例如,有4个变量a,b,c,d,若已知a【分析】题目中n个变量看成图中n个结点,图中的边即是二元关系,m个二元组就代表了这m条边表示的二元关系,(u,v)表示v大于u,从u向v连一条有向边,如果这m个二元组不矛盾,那么这个图便是一个DAG否则就存在一个有向环,解便不存在了,举原创 2016-09-27 20:47:13 · 904 阅读 · 1 评论 -
例题:单词(UVa 10129h)
输入n(n【分析】思路:欧拉道路的应用。欧拉道路,即“一笔画”,从图中一结点出发走一条道路,每条边恰好经过一次。 首先要判断图是连通的。 对于无向图,最多只有两个奇点(度数为奇数)。且从一奇点出发,到另一奇点终止;若无奇点,则可从任意点出发,最终定会回到该点(欧拉回路)。 对于有向图,最多只能转载 2016-09-27 22:46:58 · 370 阅读 · 0 评论 -
例题:除法(UVa 725)
【题目】输入正整数n,按从小到大的顺序输出所有形如abcde/fghij = n的表达式,其中a~j恰好为数字0~9的一个排列,n为2~79;Sample Input61620Sample OutputThere are no solutions for 61.79546 / 01283 = 6294736 / 01528 = 62【分析】使用暴力枚举的方法原创 2016-10-05 19:28:37 · 756 阅读 · 0 评论 -
例题:最大乘积
【题目】输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0(表示无解)。1样例输入:32 4 -352 5 -1 2 -1样例输出:820【分析】连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。由于每个元素的绝对值不超过10且不超过18个元素,最大可能的乘积不会超过10^18,可以用long原创 2016-10-05 19:52:07 · 696 阅读 · 0 评论 -
例题:UVa 839
输入一个树状天平,根据力矩相等原则判断是否平衡。如图所示,所谓力矩相等,就是Wl Dl=Wr Dr,其中Wl和Wr分别为左右两边砝码的重量,D为距离。采用递归(先序)方式输入:每个天平的格式为Wl ,Dl,Wr,Dr,当Wl 或 Wr为0时,表示该砝码实际上是一个子天平,接下来会描述这个子天平。当Wl = Wr =0时,会先描述左子天平,然后是右子天平。Sample Input原创 2016-09-24 21:42:16 · 321 阅读 · 0 评论 -
丑数(UVa 136)
丑数是指不能被2,3,5以外的其他素数整除的数。把丑数从小到大排列起来,结果如下:1,2,3,4,5,6,8,9,10,12,...求第1500个丑数【分析】从小到大生成各个丑数。最小的丑数是1,而对于任意的丑数x,2x,3x和5x也都是丑数。这样,就可以用一个优先队列保存所有已生成的丑数,每次取出最小的丑数,生成3个新的丑数。需要注意的是,同一个丑数有多种生成方式,所以需要判断一原创 2016-09-20 22:12:37 · 518 阅读 · 0 评论 -
例题:团体队列(UVa 540)
【题意】有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会被排到长队的队尾。输入每个团队中所有队员的编号,要求支持如下3中指令:ENQUEUE x:编号为x的人进入长队DEQUEUE:长队的队首出队STOP:停止模拟对于每个DEQUEUE指令,输出出队的人的 编号。【代码】#inc原创 2016-09-20 20:11:54 · 1255 阅读 · 1 评论 -
例题:竖式问题
例:找出所有形如abc*de(三位数乘以两位数,均非零。)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。 样例输入:2357 样例输出:<1>..775X..33---原创 2016-09-14 10:16:13 · 847 阅读 · 1 评论 -
例题:WERTYU
Problem DescriptionA common typing error is to place the hands on the keyboard one rowto the right of the correct position. So “Q” is typed as “W” and”J” is typed as “K” and so on. You are to decode a原创 2016-09-14 11:31:34 · 448 阅读 · 1 评论 -
例题:回文词(UVa401)
输入一个字符串,判断它是否为回文串或者镜像串.输入字符串保证不含数字0.所谓回文串,就是翻转以后和原串相同,如abba和madam。所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。#include<stdio.h>#include<string.h>#include<ctype.h>const char* rev = "A 3 HIL JM O 2TUVWXY51SE Z原创 2016-09-14 12:59:53 · 283 阅读 · 0 评论 -
例题:古老的密码(UVa1339)
文章转载自:http://blog.csdn.net/to_xidianhph_youth/article/details/37592451题目:古老的密码题目描述:给定两个长度一样且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,之后对26个字母做一个一一映射,使得两个字符串相同例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,之后把每个字母映射到它的前面一个字母,得到转载 2016-09-14 16:23:58 · 1022 阅读 · 0 评论 -
例题:大理石在哪儿(UVa 10474)
大理石在哪儿现有N个大理石,每个大理石上写了一个非负整数、首先把各数从小到大排序然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了节约篇幅,所有大理石的数合并到一行,所有问题也合并到一行。)样例输入:4 12 3 5 155 21 3 3 3 12 3原创 2016-09-18 09:11:31 · 1366 阅读 · 0 评论 -
例题:木块问题(UVa 101)
输入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置。现对这些木块进行操作,操作分为四种。1、move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;2、move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;3、pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;原创 2016-09-18 10:03:37 · 2830 阅读 · 0 评论 -
例题:安迪的第一个字典(UVa 10815)
【问题描述】输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出。单词不区分大小写。【样例输入】Adventures in DisneylandTwo blondes were going to Disneyland when they came to a fork in theroad. The sign read: "Disneyland Left."原创 2016-09-18 10:20:52 · 1644 阅读 · 1 评论 -
例题:反片语(UVa156)
输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不区分大小写,但在输出的时候保留输入时的大小写,按字典序进行排列。样例输入:ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derai原创 2016-09-18 11:10:02 · 392 阅读 · 0 评论 -
例题:枚举排列
枚举排列常见的方法有两种:一种是递归枚举,而是用STL中的next_permutation【1】生成可重集的排列#include#include#includeint p[20];int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}void print_permutation(int原创 2016-10-06 16:42:05 · 499 阅读 · 0 评论