
查找搜索
youth.lin
a tyro at CS and NLP.
展开
-
九度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 评论 -
UVa 10004 Bicoloring(二分图判定+DFS)
原题地址https://vjudge.net/problem/UVA-10004解题思路稍等~AC代码#include <iostream>#include <vector>#include <cstring>using namespace std;const int maxn = 205;vector<int> graph[maxn];int color[maxn], n;bool d原创 2017-05-20 15:28:41 · 360 阅读 · 0 评论 -
PAT 1021 Deepest Root(树的直径+BFS+并查集)
题目https://www.patest.cn/contests/pat-a-practise/1021 题意:给出一张图,判断该图能否形成一棵树,若能则求出树的最长简单路(树的直径),否则求出连通分量的个数。解题思路本题是树的直径+并查集的应用,似乎是某C9的机试题之一。解决这道题的整体思路是: 1. 先通过并查集判断连通分量的个数,若连通分量只有1个就说明不存在森林; 2. 对剩下原创 2017-06-16 14:29:44 · 395 阅读 · 0 评论 -
PAT 1020 Tree Traversals(树重建+BFS)
题目https://www.patest.cn/contests/pat-a-practise/1020 题意:给定二叉树的后序、中序遍历结果,输出其层次遍历结果解题思路首先重建树,关于利用含中序的两种序列构建这棵二叉树,详见之前的博客二叉树遍历(已知前中序求后序),最后根据这棵树的层次做输出,一遍BFS就可以解决。AC代码#include <iostream>#include <queue原创 2017-06-06 23:23:32 · 296 阅读 · 0 评论 -
PAT 1034 Head of a Gang(图遍历+BFS)
题目https://www.patest.cn/contests/pat-a-practise/1034 题意:给出1000条以内的通话记录A B和权值w,如果一个团伙人数超过2人并且通话总权值超过阈值k,令团伙里面的自身权值的最大值为头目,输出所有满足条件的团伙的头目,和他们团伙里面的人数。解题思路数据结构邻接表存放图的邻接关系,weight数组存放节点权重邻接节点 = 它通话过的所有节点原创 2017-06-29 11:55:17 · 348 阅读 · 0 评论 -
PAT 1079 Total Sales of Supply Chain(树遍历+BFS)
题目https://www.patest.cn/contests/pat-a-practise/1079 题意:将零售商-经销商-供应商这条链抽象为一棵树;供应商作为根节点,出货物的价格为p,然后从根结点开始每往下走一层,该层的货物价格将会在父亲结点的价格上增加r%,给出每个叶结点(即零售商)的货物量,求他们的价格之和。解题思路供应商-经销商-零售商三者的关系可以看作是树的根节点-内部节点-叶原创 2017-06-29 15:34:23 · 389 阅读 · 0 评论 -
hdu 2962 Trucking(二分+最短路)
AC代码#include <iostream>#include <algorithm>#include <queue>#include <vector>using namespace std;const int maxn = 1005, INF = 1 << 27;typedef pair<int, int> P; //first代表距离,second代表顶点编号int n, road;原创 2017-07-01 19:54:24 · 477 阅读 · 0 评论 -
EOJ 1082 Easy to AC(枚举+二进制子集法)
判断 非负整数n (n<=1 000 000)能否表示为各不相同的非负数字的阶乘之和,比如9 = 1!+2!+3!原创 2017-09-09 11:00:20 · 418 阅读 · 0 评论 -
EOJ 3297 铺瓷砖(DFS)
题目http://acm.ecnu.edu.cn/problem/3297/ 题意: 有一长度为 N(N≤30) 的地板,给定三种不同瓷砖:一种长度为1,一种长度为2,另一种长度为3,数目不限。要求将地板铺满,且任意两个相邻的瓷砖长度均不等。 求一共有多少种铺法?在所有的铺设方法中,一共用了长度为1的瓷砖多少块?解题思路在DFS的过程中,用参数n表示剩余地板长度,pre表示前一块瓷原创 2017-09-09 14:29:30 · 1041 阅读 · 0 评论 -
九度OJ 1456 胜利大逃亡(模拟+BFS)
原题地址http://ac.jobdu.com/problem.php?pid=1456 给定一个三维迷宫,求从入口到出口的最短路径。解题思路本题的题意很容易懂,因为刚刚写了几道DFS,所以很自然就用DFS去做这道题,可是不管怎么剪枝都1000ms+超时,改用BFS马上就用30ms AC了,可见两者在耗时上的差别实在是大。详见大神总结的[BFS和DFS区别](http://blog.csdn.原创 2017-04-27 22:28:06 · 388 阅读 · 0 评论 -
POJ 2386 Lake Counting(深度优先搜索)
原题地址http://poj.org/problem?id=2386 题意:有一个大小为N*M的园子,雨后有的格子积了水。八连通((i, j)为中心的九宫格的其余格子)的积水被认为是连续的一片水洼,求出园子里总共有多少水洼。解题思路本题是典型的枚举搜索题,一开始没有想到比较顺畅直接的解法,后来看了书才发现,搜索的同时可以改变搜索对象来帮助解题。从任意的W开始,不停地把邻接的部分用.来代替。那么原创 2017-04-27 19:24:12 · 595 阅读 · 0 评论 -
PAT 1004 Counting Leaves(BFS+模拟树)
原题地址https://www.patest.cn/contests/pat-a-practise/1004 题意:一棵有N个结点的树,其中有M个结点是非叶子结点,给出每个非叶子结点的孩子结点编号,求出每一层上的非叶子结点个数。解题思路本题考察树的结构,这种看似树结构,但用数字编号表示节点的题目,经常可以用数组模拟,无需构造出一棵树。数据结构: 注意到结点编号最多为两位,因此100以内的原创 2017-05-10 12:28:12 · 434 阅读 · 0 评论 -
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 评论 -
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 232 Crossword Answers(枚举+输入输出)
原题地址https://vjudge.net/problem/UVA-232 题意:输入r行c列的网格,黑格用 ‘*’ 表示, 每个白格上都填有一个字母。如果一个白格的左邻或上邻位置没有白格(黑格或越界),则称该白格是一个起始格。 首先将所有起始格按照从上到下,从左到右的顺序编号1,2,3…… 接下来找出所有的横向单词(从一个无左邻的起始格开始,向右延伸至黑格或边界),再找出所有的纵原创 2017-04-13 14:36:29 · 354 阅读 · 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 评论 -
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 · 606 阅读 · 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 · 356 阅读 · 0 评论 -
PAT 1010 Radix(大进制转换+二分查找+剪枝)
原题地址https://www.patest.cn/contests/pat-a-practise/1010 给定一个数字a及其进制,判断另一个数b是不是a在其他进制下的表示。(a,b较大,以字符串形式给出)解题思路本题考察进制转换,但是和之前做过的一次性转换题都不太一样,即要求搜索出满足b.value = a.value时b的进制数。 判断两进制数是否相等的基本思路:两个数都用10进制表原创 2017-05-17 23:24:13 · 458 阅读 · 0 评论 -
琐碎BFS/DFS
简单部分和 给定n个数字,能否取出部分数字的和等于k。DFS适合于解决“是否存在解”的问题。复杂度随数据量呈指数级上升,只适合于小数据量。DFS(i, sum)表示处理完前i-1个数以后的和为sum,正要对第i个数处理。对第i个数处理时,要么将s[i]加到sum里,要么跳过这个数,然后继续搜索。 剪枝:当处理到第i个数时已经溢出k,则直接返回false。#include <iostream>原创 2017-06-29 20:25:15 · 219 阅读 · 0 评论