POJ 专项题解
文章平均质量分 54
算法与数据结构实战演练
声明:
我不是ACMer
我只是一个算法爱好者
GMFTBY
for all
展开
-
POJ 3295 - 位运算 + 模拟 +递归
1.Question:本题是用枚举的思路来判断一个规定的逻辑表达式是不是永真式首先题目意思是最多不会有超过5个逻辑变量,有五种运算Definitions of K, A, N, C, and E w x Kwx Awx Nw Cwx Ewx 1 1 1 1原创 2016-12-04 16:47:49 · 984 阅读 · 1 评论 -
POJ 1062 - 昂贵的聘礼 - 经典题
1.Question:中文题不说什么了2.Solution:本题的难点有两个1.建图2.限制建图:首先,我们需要明确本图G是一个有向图,我们的顶点代表庙我们的物品的编号,图采用邻接矩阵存储,我们的图中的邻接矩阵中存储我们的便宜价格这样的话,我们每个点只要在限制条件下都可以找到1点,那么我们就取到达1点的最小值当作我们的答案限制:本体的限制说的很明原创 2016-11-30 17:57:26 · 921 阅读 · 0 评论 -
POJ 1860 - SPFA - 正权回路
1.Question:我们的城市有几个货币兑换点。让我们假设每一个点都只能兑换专门的两种货币。可以有几个点,专门从事相同货币兑换。每个点都有自己的汇率,外汇汇率的A到B是B的数量你1A。同时各交换点有一些佣金,你要为你的交换操作的总和。在来源货币中总是收取佣金。例如,如果你想换100美元到俄罗斯卢布兑换点,那里的汇率是29.75,而佣金是0.39,你会得到(100 - 0.39原创 2016-11-29 17:58:26 · 766 阅读 · 0 评论 -
POJ 2240 - SPFA - 正权环(最大路)
1.Question:输入n代表有n个国家之后的n行代表n个国家的名称输入m代表有向边的个数之后的代表我们国家货币之间的汇率现在求,是否存在一条回路是的我们的交换货币之后原本的货币量增多2.Solution:本题是标准的判断回路的问题,我们需要将最短路的标准思路转变一下,首先,本题我们需要找到的是正权回路不是负权回路,我们只需要改变一下松弛策略就好,我们只要将松原创 2016-11-29 09:22:01 · 966 阅读 · 0 评论 -
POJ 3259 - SPFA负权回路 < Floyed
1.Question:POJ 3259农夫约翰在探索他的许多农场,发现了一些惊人的虫洞。虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500)条路径,W(1≤W≤200)个虫洞。FJ作为一个狂热的时间旅行的爱好者,他要做到以下几点:开始在一个区域,通过一些路径和虫洞旅行,他要回到最开时出发原创 2016-11-26 11:54:15 · 624 阅读 · 0 评论 -
POJ 2676 数独 && 编程之美1.15
算法讲解:low逼算法DFS,这里如果不用空间换时间会TLE所以说我们加入三个判断矩阵hang[x][i] 第x行有没有出现ilie[x][i] 第i列有没有出现isq[x][y][i] 以x,y为首标号的子矩阵有没有i 然后总结一些常见错误:1.每次试探成功,hang,lie,sq都要更新2.我们如果不用bool类型的函数的话那么每次都要在试探语句下面加上原创 2016-08-24 10:34:50 · 375 阅读 · 0 评论 -
POJ2524——并查集
1.题目描述:题目链接我们调查一所学校的宗教信仰我们询问m对人,看是否信仰相同,在这里,如果信仰相同,我们就对其进行合并操作就可以了2.算法:简单并查集,我们有两个思路好的思路:初始我们的宗教数目是所有的人的个数,如果我们要合并的时候,如果判断的二者宗教信仰相同,我们在unit操作中要对其二者进行合并操作如果目前二者判断是统一宗教并且我们没在同一族谱中,那么我们可以断定原创 2016-08-27 11:44:07 · 583 阅读 · 0 评论 -
POJ1611-----并查集
1.题目大意描述:题目链接某一个学校存在0-N-1名学生,0号学生已经确认患病,我们会给出如下数据首先每组数据会开始输入两个数,第一个n代表学校的学生的数目,第二个m代表学校的社团的数目接下来m行代表m个社团的成员的情况,(注意接下来的每行的第一个数字代表社团的成员的数目,后面的数字是成员的编号)我们现在需要确认学校中有多少人确认患病2.算法:原创 2016-08-27 12:00:50 · 649 阅读 · 0 评论 -
POJ1182——带权并查集
1.问题描述:食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 64435 Accepted: 18933Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个原创 2016-08-28 20:28:22 · 785 阅读 · 1 评论 -
POJ1308——并查集
1.题目:Is It A Tree?Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 29735 Accepted: 10173DescriptionA tree is a well-known data structure that is原创 2016-08-29 12:17:33 · 593 阅读 · 0 评论 -
POJ2299——归并排序求逆序对数
1.题目大意:求一组数列的逆序对数输入:1.输入n代表之后输入的数据的数目2.之后n+1行每行代表一个数据3.如果n是0,结束程序,本次数据不作处理2.思路归并排序,我们每次在归并的时候,对于前一个有序的数组和后一个有序的数组进行比较,如果前一个比后一个大,那么前一个数组之后的都比他大,加快计算ps:易错点,本体最后的结果可能会非常大,建议用__原创 2016-09-04 11:20:04 · 535 阅读 · 0 评论 -
POJ2421——最小生成树复习
1.题目:村庄之间有些路,有的已经修过了输入n代表村庄的数目之后n*n代表村庄之间的道路的长度的矩阵输入q之后q行代表已经修过路的两个村庄的标号求最小生成树2.算法:Krustral不解释3.AC代码:#include"iostream"#include"cstdio"#include"cstring"#define N 105using原创 2016-09-04 12:28:59 · 363 阅读 · 0 评论 -
POJ1789——最小生成树
1.题意:输入:n输入,代表有n个长度为7的字符串,我们以字符串本身为结点,题中定义了两个节点之间的距离,定义为两个字符串中相同位置处不同的字符的个数,所以我们发现本题是个非常稠密的图我们直接用二维矩阵记录所有的数据比较能够大米毒的合理利用空间输出最小生成树的倒数2.算法:本题中我们会发现,边的数目非常的庞大这就引出了一个问题Krustral算法要涉及到排序,如此大原创 2016-09-04 18:22:34 · 459 阅读 · 0 评论 -
POJ2485-最小生成树水题
1.算法:本体已经给你邻接矩阵了注意要点:1.本题中图是边护很多的图,所以说,本体使用Krustral算法不太理想,我们要排序的边实在太多了,所以说我们采用Prim算法2.本题的求解题意是求出最小生成树中的最大边,我们对求最小生成树的算法稍加改进就可以AC2.AC代码#include"iostream"#include"cstdio"#include"cstring"原创 2016-09-07 20:36:46 · 386 阅读 · 0 评论 -
POJ1258-最小生成树水题
#include"iostream"#include"cstdio"#include"cstring"#define inf 99999999using namespace std;int map[510][510];int dis[510];int n;int sum;int book[510];int main(){ while(scanf("%d",&n)!=E原创 2016-09-07 20:40:45 · 281 阅读 · 0 评论 -
POJ3026-最小生成树+BFS
1.蛋疼的题目:这道题有两个蛋疼的地方1.出题者脑残了,看来discuss才知道,WA了这么多原来是真是数据后面不止一个空哥个和换行2.数据大小根本不是100,要比100大,尽量开大吧2.算法思路:1.题意:在一个迷宫里,起点是S,A代表外星人,我们需要找到最短的路径将S和所有的A连接起来,输出最短的这个路径总长2.思路:1.首先,我们需要利用BFS对图进行预处理,原创 2016-09-07 22:35:49 · 680 阅读 · 0 评论 -
POJ2388-排序水题
1.题目:奇数个数排序求中位数2.三种排序方法:1.快排 700k 16Ms#include"iostream"#include"cstdio"#include"cstring"#define N 10010using namespace std;int data[N];int n;void quicksort(int left,int right){原创 2016-09-08 11:19:30 · 1264 阅读 · 0 评论 -
POJ3253——哈夫曼思想的优先队列
Question:给一串数,求出哈夫曼树的总代价Solution:贪心的哈夫曼思想,我们利用对来进行优先队列的维护ps:本题中因为虽然限定了每个木块的长度在int型范围内,但是随着我们不断的加和,该数值会超过int的范围,所以说我们用long long 来八寸最后的统计结果,不然会爆掉Code:#include"iostream"#include"cstd原创 2016-09-11 11:24:53 · 376 阅读 · 0 评论 -
POJ2488——简单DFS
Question:题目中给出了国际象棋的地图,要求我们将马按照他的走子方式进行移动,能够将整个棋盘走遍则我们将走姿方式按照字典序进行输出,否则输出impossibleSolution:本题主要考察的是方向数组的顺序,首先,我们需要明确一点,如果我们要按照字典序进行输出的话并且还要踩遍整个棋盘,我们那必定会经过A1点,所以说我们的顺序必定是开头是A1的一组字典序顺序按照上图的原创 2016-09-11 14:51:30 · 417 阅读 · 0 评论 -
POJ2386-简单BFS/DFS
Question:对于一个图,八个方向代表相邻,求出相邻的块的个数Solution:BFS/DFS搜索,我们对图整个进行扫描,一旦发现了'W‘,我们进入搜索函数,对周边的额八个方向整体进行扫描,并同步修改图,当我们扫描完整个图的时候,我们也就计算出来了块的个数Code:#include"iostream"#include"cstdio"#include"cstdlib"#原创 2016-09-15 10:51:44 · 2289 阅读 · 1 评论 -
POJ3617-贪心字典序 水
Question:字典序贪心,大水题,注意一下题目的输出格式就好了Code:#include"iostream"#include"cstdio"#include"cstring"#include"cstdlib"#define N 2001using namespace std;int n;char data[N];int main(){ cin>>n; f原创 2016-09-15 16:38:23 · 329 阅读 · 0 评论 -
POJ2251-简单三维BFS
Question:不解释三维的地图,S是起点,E是终点,如果可以逃出,输出最短路径如果不能逃出,输出TrappedSolution:因为是要查找最短路径,所以说,这里我们采用BFS作为我们的搜索策略,本体水,没什么难度,记得开一个六个方向的移动数组就OK了Code:32MS#include"iostream"#include"cstdio"#include"cstrin原创 2016-09-16 09:12:29 · 292 阅读 · 0 评论 -
POJ1321-DFS八皇后变种
Question:本体是八皇后的变种题目,改为不规则的棋盘,但是还是要求每个妻子不能同行同列求对于对应的棋盘和妻子个数输出所有的和法的摆放的个数Solution:我们这里利用一个小技巧,我们开辟行数组和列数组,用来记录那些行和那些列别占用过剩下的就是标准的DFS了这里我第一次T是因为行数加错了,我们下一次直接从上一次的旗子的下一行开始摆放,这样节省时间Code:#i原创 2016-09-16 09:39:21 · 1267 阅读 · 0 评论 -
POJ3009-DFS
Question:本体算是比较难的DFS搜索题目了,首先本体不能用BFS来进行搜索,因为我们每次的状态导致的地图都是不一样的改变,我们只能利用DFS来穷举,但是有的同学可能会害怕DFS在该地图自由度非常高的情况下会超时,其实大家不要担心,因为题目中已经给了我们10者个限制,这个10就是来帮助我们进行剪枝的Solution:DFS穷举每一种情况,每一次碰撞记得改变地图,此外及时标准的 搜原创 2016-09-16 10:16:15 · 320 阅读 · 0 评论 -
POJ3278-BFS容易出现思维漏洞
Question:本体是标准的三个入口的BFS水题,但是细节问题太多Solution:1.数组没必要太大,一旦RE了,是因为出现了这么几种情况,出现负数,因为题中声明不会有负数的出现,把负数的情况短路掉还有就是我们一不小心越界,这时候,我们和上一种一样,我们需要先预判短路,再进行下标访问2.记录数组是很有必要的,防止TLE3.小心n,k相同点额情况,此时输出原创 2016-09-16 10:37:12 · 909 阅读 · 0 评论 -
POJ3069-贪心水
Question:本体摘自《挑战程序设计2.2.4》,详情见书求最少的标记点覆盖所有的点Solution:我们这里采用的贪心思路是每次从起点开始贪半径,找到我们的原点之后,在贪右边,找到下一次的起点Code:#include"iostream"#include"cstdio"#include"cstring"#include"cstdlib"#include"alg原创 2016-09-16 12:12:12 · 503 阅读 · 0 评论 -
POJ 1753 - 位运算(异或)+BFS / DFS+枚举
1.Question:题目大意:有一个4*4的棋盘,棋盘上有黑白子,我们对棋盘进行如下操作:操作的定义:我们每次可以反转一个棋子,即黑变白,白变黑,之后上下左右四个方向的棋子都会跟着进行翻转操作题目中让我们求可以使得整个棋盘变成纯色的最少的操作次数2.Solution:本题的解法思路有很多,之后的枚举+DFS的思路我会更新补上,这里我们着重讲解位运算+BFS的思路求原创 2016-10-24 09:22:41 · 868 阅读 · 0 评论 -
POJ 2965 - 状态压缩 + BFS
1.Question:和上次的1753是一个思路题意:有一个4*4的表格,+代表关,-代表开,请输出让整个图都是开的状态所需要的最小操作次数定义操作:我们每次可以翻转一个按钮,同时同一行和同一列的元素都会执行相同的反转操作和1753一样,我们同样用位运算压缩状态2.Solution:状态压缩+BFS总共只有2^16个状态需要枚举,所以说本题还是可以做到很原创 2016-10-25 08:58:18 · 294 阅读 · 0 评论 -
POJ 1328 && NYOJ 891 - 贪心 区间选点问题
1.Question:题意:题目中抽象了一个俯视图,以x轴为海岸线,y的负半轴一下是陆地,y的正半轴是海洋,在海洋上有很多岛屿我们有一中雷达,雷达的侦测半径是d,现在要我们输出可以将所有的岛屿全部都侦测到的最少的雷达的个数我们定义输入:n,d分别代表岛屿的个数和我们的雷达的半径之后的n行两个数据代表了岛屿的坐标(小心坐标的值可以使负数,也可以d大)本题有多组输入,当遇到原创 2016-10-26 22:25:40 · 429 阅读 · 0 评论 -
POJ 2109 - double
1.Question:本题的正解是高精度+二分法但是题目的bug导致我们直接一行用double也可作二分+高精度我之后会补上这里的blog相当于是插了个flag吧2.Code:#include"iostream"#include"cstring"#include"cstdio"#include"cmath"using namespace std;原创 2016-10-27 23:12:21 · 244 阅读 · 0 评论 -
POJ 2586 - 贪心 or DP
1.Question:有一个公司,12个月份,所有的连续的5个月都是亏损的,请求出在此情况下的一年最大的盈利数目,如果没有输出Defict输入:n,d分别代表每个月的固定的收入和固定的亏损2.Solution:相比较而言,DP的思路更快:DP 0ms 贪心16ms本题我用了两种思路去做:1.贪心:网上的大神的讲解:我们从1月开始贪心,每次将亏损的月份放在最后面才原创 2016-10-28 09:21:16 · 376 阅读 · 0 评论 -
POJ 2503 - 字符串哈希
1.Question:简单的字符串哈希的题目引用拉链法处理冲突2.Code:#include"iostream"#include"cstring"#include"cstdlib"#include"cstdio"#define N 100003using namespace std;typedef struct node{ char english[15];原创 2016-10-30 09:45:20 · 315 阅读 · 0 评论 -
POJ 2503 - 字典树再解
1.Question:题意:有不超过10w个字典序列,每个字典序列中都是两个字符串,第一个字符串是英文,第二个字符串是对应的一门不知道什么语言现在要求我们尽可能快速的建立映射,是的我们根据输入的外语可以快速的查找到对应的英语每个单词的长度不超过10,全部都是小写(简化了问题)输入样例和解释:dog ogdaycat atcaypig igpayfroot原创 2016-10-31 12:07:39 · 465 阅读 · 0 评论 -
POJ 2503 - 二分+快排
1.Question:前文有2.Solution:本文采用二分+快排的模式我们都知道字符串在字典序下是有严格的递增的序列的,所以我们利用字符串的字典序作为待查序列,利用二分法来查找PS:二分法的时间复杂度是O(n*logn),但是字典树是接近O(n),但是在测试中,二分比字典树还要快一点,我有些不得其解,可能库函数对排序而做了非常好的的优化我也不知道,也有可能是数据的问原创 2016-11-01 09:33:18 · 485 阅读 · 0 评论 -
POJ 3349 - 数值哈希(这辈子只服数据量)
1.Question:题意描述:输入:n代表有多少片雪花之后的n行,每行6个数字代表雪花的6个枝杈的长度(正序逆序都可以)输出:如果以上的雪花中出现了同构的情况,那么我们认为出现了相同的雪花最后如果我们认为有两种相同的雪花,输出Twin snowflakes found.否则输出No two snowflakes are alike.2.Soluti原创 2016-11-01 21:13:00 · 1304 阅读 · 0 评论 -
POJ 3329 - 数学 + 哈希
1.Question:题意:平面上有一些二维点,现在我们要求输入的这些二维点最多可以构成多少个正方形,注意选择的点次序不同得到的正方形视作相同的正方向输入:有多组测试用例,首先每一组测试用例的第一行n表示有n个点之后的n行中两个数字分别表示二维点的横纵坐标输出:可以组成的正方形的个数2.Solution:首先我们来描述一下为什么朴素的枚举人以四个点地做法是不行的原创 2016-11-02 16:15:51 · 536 阅读 · 2 评论 -
POJ 3274 - 数组 + 哈希
1.Question:2.Solution:首先我们通过范例来了解一下题意是什么:7 31 1 11 1 00 1 00 0 11 0 00 1 0如代码所示,我们k代表的是二进制的位数,n代表的是奶牛个数注意这种排列是题目要求的唯一的,我们不能改动最后,我们开始转化问题首先,我们想要快速的求出差值最好的方法就是就是对数组从头到尾进行累加(这种方法也原创 2016-11-03 16:08:11 · 333 阅读 · 0 评论 -
NYOJ - 138 节约内存 哈希
1.Question:在某一国度里流行着一种游戏。游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY”,表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分别判断编号为ki 的球是否在这个空箱子中原创 2016-11-04 12:46:29 · 486 阅读 · 0 评论 -
POJ 1840 - Hash
1.Question:题意:本题中有一个五元三次方程,现在让我们求解出系数都在-50-50,未知元的范围是-50-50的所有的解的个数,不计含0的解PS:首先,我们首先要知道,为了简化我们的操作,题目已经限定了系数和解得的取值范围,并且解是 整数 2.Solution:首先,对于我们的朴素的算法的话,我们需要对所有的情况都进行枚举,中国需要我们枚举50^5,很显然,这种算法的思原创 2016-11-04 17:07:33 · 473 阅读 · 0 评论 -
快速幂取模算法详解
1.大数模幂运算的缺陷:快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源的,在整个计算过程中最麻烦的就是我们的5^1003这个过程缺点1:在我们在之后计算指数的过程中,计算的数字不都拿得增大,非常的占用我们的计算资源(主要是时间,还有空间)缺点2:我们计算的中间过程数字大的恐怖,我们现有的计算机原创 2016-11-05 10:40:41 · 44172 阅读 · 14 评论