算法竞赛入门经典
qq_38232157
这个作者很懒,什么都没留下…
展开
-
HOJ 1016 / UVA 524 Prime Ring Problem(算法竞赛入门经典,深搜)
算法竞赛入门经典194页,深搜题目意思: n 个数, 从 1 到 n , 要求排成一圈,使得相邻数的和是素数。 求出所有的排列方式,其中 1 必须在第一位。按字典序输出所有的排列方式。本题要点:1、n <= 20, 可以暴力搜。 显然,只有n是偶数的情况,才可能存在这种排列方式。2、用 vector 来存每一种方式, 再用 set<vector > 来排序。3、素数的处理, 用数组 isprime[i] 表示 i 是否是素数。4、vis[i]表示 第i个数字,是否已经选择,原创 2020-09-09 23:36:38 · 105 阅读 · 0 评论 -
UVA 439 Knight Moves(算法竞赛入门经典,bfs,裸题)
/*算法竞赛入门经典177页,bfs,裸题本题要点:1、马走日,有8个方向,写好8 个方向, for(int i = 0; i < 8; ++i)2、套用 bfs 的模型即可。*/#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;const int MaxN = 9;bool vis[MaxN][Max原创 2020-09-02 18:50:24 · 278 阅读 · 0 评论 -
UVA 1600 Patrol Robot(算法竞赛入门经典,bfs,经典)
算法竞赛入门经典177页,bfs,经典题目意思:有一个 n * m 大小的矩阵, 矩阵 只要数字 0 或者 1,0 表示空白可以走,1 表示有障碍物。现在,要求 从起点 s(1, 1) 走到终点 t (n, m), 这两点都是空白。 每次走,可以连续穿过 k 个障碍物。问,从 s(1, 1) 到 t (n, m) 至少走多少步。本题要点:1、这里的 “连续穿过 k 个障碍物” , 不一定是只要沿着一个方向走,这里的走可以是拐弯的走法。所谓的拐弯,比如,从 点 (1, 1) ,右,下,下,左,原创 2020-09-02 18:47:02 · 94 阅读 · 0 评论 -
UVA 10305 Ordering Tasks(算法竞赛入门经典,拓扑排序,裸题)
算法竞赛入门经典167页,拓扑排序,裸题本题要点:1、用 deg[x], 存放点x的入度。先把所有入度为0 的点加入队列 queue;2、每次从队头取出一个点 y, 将y 所指向的所有点的入度减去1. 如果某点度数为0, 把该点也加入队列。#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;const int Max原创 2020-09-02 12:22:34 · 103 阅读 · 0 评论 -
POJ 2255 Tree Recovery(算法竞赛入门经典,二叉树遍历,水题)
二叉树遍历,水题题目意思:给出先序和中序,求后序本题要点:1、 一个二叉树的先序和中序,确定一颗唯一的二叉树。2、写一个递归,由先序和中序建立一颗二叉树3、再写一个递归,后序遍历二叉树,打印每一节点。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 30;char pre[MaxN], mid[MaxN];stru原创 2020-09-02 12:16:23 · 1079 阅读 · 0 评论 -
UVA 246 10-20-30(算法竞赛入门经典,模拟,stl)
算法竞赛入门经典179页,模拟,stl题目意思:给52张的扑克堆,先从左往右发7张牌,之后连续不断从左往右发7张牌,如果有牌堆形成了以下3种情况(按顺序判断):1、头两张+尾一张和为10或20或302、头一张+尾两张和为10或20或303、尾三张和为10或20或30就把这三张牌拿走,放到总牌堆底(这步要不断执行直到不再满足条件或牌堆没了)如果有一个牌堆因为这个操作被取完了,那么以后将不在这个位置发牌。如果最后7个牌堆都可以消掉,那么赢,总牌堆用完,那么输,否则平(即不断循环)问最后的输赢平原创 2020-09-02 10:40:08 · 128 阅读 · 0 评论 -
UVA 127 “Accordian“ Patience(算法竞赛入门经典,模拟,stl)
算法竞赛入门经典179页,模拟,stl题目意思:模拟题,关键理解题目意思和样例有 52 张扑克牌,一开始,全部排列成一行,每张牌看做是一堆牌。每次从左到右扫描, 假设当前扫描到第 x 堆牌(假设这堆牌的最上面是 x),x 牌如果 和 x 前面第 1 张 或者第 3 张 牌匹配的话,就把第 x 堆牌最上面的那一张牌,放到与之匹配的那张牌所在堆的最上面。优先选择最左边的牌。 如果这张牌的 左边 第1 和第3 都与之匹配,那么优先 放在第 3 个的位置。本题要点:1、 每一堆牌,用 stack 来存,原创 2020-09-01 21:32:54 · 164 阅读 · 0 评论 -
UVA 804 Petri Net Simulation(算法竞赛入门经典,模拟)
算法竞赛入门经典177页,模拟题目意思:np个节点 p[1], p[2], … , p[np], 每个节点有若干个牌子 token, 节点与节点之间不直接联系,中间间隔了一个叫 发射站 trans 的玩意。每一节点向外只能指向一个 发射站。并且,一个节点指向同一个发射站若干次,节点就需要若干个 token 。发射站也是不能直接相连,多个节点,可以同时指向一个发射站;每一个发射站,可能指向若干个 节点。一个发射站,是否能点火发射,主要看看这个发射站 Trans ,指向 Trans 的每一个节点,原创 2020-09-01 16:50:09 · 269 阅读 · 0 评论 -
UVA 12118 Inspector‘s Dilemma(算法竞赛入门经典, 图的连通,欧拉路径)
算法竞赛入门经典181页, 图的连通,欧拉路径题目意思:有n 座城市,每两个城市之间都有一条双向道路。现在给出 m 条道路,连接了若干城市,现在要求,寻找任意一条路径,使得这条路径,经过这m条道路。本题要点:1、首先考虑图的连通问题:假如该图有 block_num 个连通块, 每个连通块都存在欧拉路径,那么,只需要把这 block_num个连通块,连起来即可。因此只需要添加 block_num - 1 条边(只有一点的连通块不考虑)。某个连通块存在欧拉路径,说明这连通块,最多只有两点是奇度数原创 2020-09-01 02:10:43 · 280 阅读 · 0 评论 -
UVA 12504 Updating a Dictionary(算法竞赛入门经典,stl)
算法竞赛入门经典,stl本题要点:1、处理每一条字符串的时候,使用 字符串流stringstream 来处理,先把原来的字符串中的字符 ‘{’, ‘}’, ‘,’ 替换为 空格 ’ ', 然后就好处理了。2、使用 map<string, string> 来记录每一条字符串中对应 的 key 和 value3、寻找第二天字符串新 增加的, 删除的, 修改的字符串,各自用一个 set 来存,寻找一个 map 中,是否存在字符串 str , 用find函数。#include<bi原创 2020-08-30 22:56:40 · 109 阅读 · 0 评论 -
UVA 12100 Printer Queue(算法竞赛入门经典,stl, 优先级队列)
算法竞赛入门经典,stl, 优先级队列题目意思:一台打印机,有一个打印序列,表示各个打印任务的优先级。然后,每次要打印当前任务时候,看看队列中后面是否有任务的优先级更紧急,如有,就把当前的任务加入到队列的末尾。否则,打印当前的队列。本题要点:1、使用 队列 queue ,和 priority_queue 来模拟。用数组 prio_num[i] 表示优先级为i的有多少个队列 queue 存放的是各个打印任务,priority_queue 存放的是所有的优先级,然后堆顶 top 存放的都是最大的优原创 2020-08-30 18:41:19 · 177 阅读 · 0 评论