自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 问答 (1)
  • 收藏
  • 关注

原创 2020ACM_++

孤影烛台伴秋风,月映窗棂忆誓言。惆怅出走半生去,逍遥归来仍少年。

2020-04-18 18:34:22 258

原创 P1918 保龄球

这道题也是很简单的~可手写hash,也可以直接用unordered_map,为什么不用map呢,因为map的效率太低了,map里面是红黑树,会自动排序,和set一样但是unordered_map就是用hash实现的,非常方便~先来说下区别:排序map: 在缺省下,按照递增的排序顺序unordered_map :不排序执行实施map :在map内部采用了自平衡的BST(二叉搜索树)...

2020-04-29 17:04:21 426

原创 P5266 【深基17.例6】学籍管理

STL天下第一!C++天下第一!用map不要太爽了~#include <iostream>#include <map>using namespace std;map<string ,int > t;//存储姓名和分数typedef map<string ,int >::iterator It; int main() {...

2020-04-29 16:34:31 384

原创 P5250 【深基17.例5】木材仓库

set自带的函数常用的有10种:(1)set<int> a 建立一个名字为a、类型为int的集合。(2)a.insert(b) 在集合中插入一个数b,如果这个数已经存在就什么也不干(3)a.erase(b) 在集合中删除一个数b,如果这个数不存在就什么也不干(4)a.erase(l) 在集合中删除地址为l的数(5)a.end() 返回集合中最后一个数的下一个数的地址(6)a.find(b) 查询b在集合中的地址,如果这个数不存在就返回a.end()(7)a.lower_bound

2020-04-29 12:47:10 406

原创 P3405 [USACO16DEC]Cities and States S

这道题目比较简单~感觉是假的蓝题,用字符串hash将每个省和市计算出对应的数值,并将其标记,这里我们用map, 我们只需要关心城市前面两个字符,后面的都可以舍弃但是题目中说了,两个配对的城市一定是要来自不同的省份,所以,城市前两个字符和省相同的话,我们不用考虑输入的这个城市和其他城市是是否有配对的~就比如:3Migk MiMirk MiMirk Mi如果不搞个特判就是3了,...

2020-04-29 10:52:33 530

原创 P3370 【模板】字符串哈希

这是道很好的字符串hash入门题,题目中明确说过了~用STL就没意思了。由于数据量比较大,所以我们算出字符串对应的10进制数以后再对mod取余,可以证明。当进制数为107级别,Mod为109级别,产生冲突可能性会很小~下面是AC代码~#include<iostream>#include <vector>#include <algorithm>us...

2020-04-29 08:58:41 267

原创 P1536 村村通

依然是并查集的思路,我们只需要求出有几个集合就行了,最后用集合数减去1,比如3个点只需要两条线段链接~下面是是AC代码~#include <iostream>#include <cstring>#define Max 1005int a[Max];bool flag[Max];using namespace std;int find(int x1); /...

2020-04-28 11:47:00 197

原创 P1551 亲戚

很好一道并查集入门题~#include<iostream>using namespace std;#define Max 10000int a[Max];int find(int x1);void unions(int x1,int x2); int main() { int n,m,p; cin>>n&gt...

2020-04-28 11:04:21 212

原创 P3884 [JLOI2009]二叉树问题

一这道题也很简单,核心是寻找两个点的最大深度公共父节点(也就是说距离两个点的最近的公共父节点)想要求公共父节点就要用到一个算法:Tarjan离线算法Tarjan是一人的人名,叫塔尔杨,是美国的计算机科学家~至今任活着这个算法思路很简单,大致概括为这几句话1.任选一个点为根节点,从根节点开始。2.遍历该点u所有子节点v,并标记这些子节点v已被访问过。3.若是v还有子节点,返回2,否则...

2020-04-27 16:26:00 224

原创 P1030 求先序排列

这道题有100种做法,我们一如既往的用建树的方法~但是一定要找准左右子树的先序后续的范围呦,我因为没有找对范围A了20来分钟#include <iostream>using namespace std;#define Max 10000struct Node{ Node *left,*right; char c;};string str1,str2;...

2020-04-26 19:04:08 122

原创 P1305 新二叉树

此题我第一反应就是map,STL果然天下第一~下面是AC代码#include <iostream>#include <map>#define Max 10000using namespace std;void print(char root);struct Node{ char left,right;};map<char,Node>...

2020-04-26 12:32:12 113

原创 P1229 遍历问题

这道题其实很简单,看着挺复杂。其实是用来唬人的先想一下,为什么给定中序和前序 或者 中序和后续就能唯一确定一颗二叉树?答案是:可以每次由前序 后者 后续确定树的根节点,然后去中序中去寻找这个根节点,这样就可以划分出左子树和右子树了。但是前序和后续就没办法确定,我们无法对其进行划分。那么是什么导致前序和后续中序结果的不同呢?如图所示的二叉树,其前序:ABC,后续:BAC,他的中序是唯一的...

2020-04-26 11:17:00 356

原创 P1364 医院设置

这道题节点数<=200可以直接用Floyd,看到有dalao用带权树,真心佩服,本蒟蒻只会用板子~Floyd算法思想:任意两个节点i, j 如果有一个中间节点u可以使得dis[i][u]+dis[u][j]<dis[i][j],那么我们就更新这个值dis[i][j]=dis[i][u]+dis[u][j]对于每两个节点,我们只需要枚举所有可能的中介节点,看看是否满足上面的条件,...

2020-04-26 08:57:00 429

原创 P3371 【模板】单源最短路径(弱化版)

这道题虽是模板题,但是有毒瘤数据,我被这个点坑惨了下面是毒瘤数据之一5 15 52 5 1811 5 984 2 493 2 2624 3 262 4 1925 1 2212 2 2544 4 2331 5 445 4 674 2 2141 1 471 1 1185 4 3看到没,有两个1–5,第一个1 5 98 第二个 1 5 44也就是存储路程的时...

2020-04-24 13:45:31 524

原创 迪杰斯特拉(Dijkstra)

心血潮来,想写一篇关于迪捷斯特拉算法的文迪捷斯特拉算法适合求单源最短路径的问题,例如给你一个图,要你算出某一个起点s,到其他任一点e的最短路径。Dijkstra有人说是贪心,有人说是dp,有人说是弱化版本的bfs,如果想知道原理的小伙伴建议去看算法导论的证明部分~如图所示,现在我们要求从v0----- 图中任意一个节点的最短路径。算法思路:首先建立一个数组int d[Max], 这个数组的...

2020-04-23 09:51:12 1104

原创 P5076 【深基16.例7】普通二叉树(简化版)

这道题的正解应该是bst,但是写bst太复杂了。只好对可怜的STL下手,STL支持迭代器+数字的好像只有string 和 vector,其他迭代器智能++,–,不能加减数字我们这里使用multiset,multiset和set不同的是mulltiset可以不用去重,但是其序列是从小道道排列好的,非常方便插入一个元素下面是AC代码~~#include <iostream>#in...

2020-04-21 23:29:43 267

原创 P1827 [USACO3.4]美国血统 American Heritage

这道题可以说是很好的一道二叉树入门题,这道题有很多种做法,这里介绍一种最简单的做法,建树的操作如图所示,先在前序中找到第一个节点C,然后去中序中查找C的位置我们设前序的序列为Lpre–Rpre中序为L-mid—R–mid设找到C的位置为k,那么此时可以用C把左右子树划分,并将C作为树的根节点左子树的个数为K-L-mid,右子树的个数为R-mid-K;我们用同样方法将左右子树分别进...

2020-04-21 14:41:12 635

原创 P4913 【深基16.例3】二叉树深度

这道题题目描述不太清楚是这样的图画出来就很清楚了,直接dfs即可,下面是AC代码~#include <iostream>#include <utility>using namespace std;#define Max 10000001typedef pair<int,int > Node;Node a[Max] ;//存储左右孩子int...

2020-04-21 10:05:44 407

原创 P4715 【深基16.例1】淘汰赛

这道题比较简单,方法有多种。这里就介绍一种线段树的做法我们搞个结构体就行,存储国家编号和能力值#include<iostream>#include <utility>using namespace std;typedef pair<int ,int > Node;Node a[150] ,tree[600]; //pair<int ,in...

2020-04-21 09:34:45 334

原创 线段树

掌握了二叉树不掌握线段树真的有点可惜的,线段树本身并不难,代码也容易理解。这玩意发明出来就是为了提高效率的,例如:你现在要在数组中计算任意一段区间 Li-------Lj 之间的和,如果采用数组遍历,那么时间复杂度肯定是O(n),当然你说你可以前缀处理,可以让时间复杂度达到o(1),问题是你前缀处理的时间加起来中和考虑一波,你还是难以逃脱o(n)的魔掌,并且如果数组中有一个节点的值改变了,你不得将...

2020-04-20 23:08:35 1103

原创 P4387 【深基15.习9】验证栈序列

这道题就是一道很普通的模拟题,我们只需要模拟出栈的顺序即可对于每一个给定的入栈顺序,我们模拟出栈顺序,如果模拟不下去了,我们就输出No,如果最后栈空了,就输出Yes问题来了,我们如何取模拟出栈顺序呢。我们将出栈的指针指向出栈的第一个元素,我们先将第一个元素入栈,然后检查一下当前栈顶的元素是否等于出栈指针所指向的第一个元素,如果不等于,继续入栈,如果等于,就将栈顶元素弹出,出栈的指针后移一位,...

2020-04-19 14:56:40 171

原创 P2058 海港

说明/提示【样例解释1】第一艘船在第11秒到达海港,最近2424小时到达的船是第一艘船,共有44个乘客, 分别是来自国家4,1,2,24,1,2,2,共来自33个不同的国家;第二艘船在第22秒到达海港,最近2424小时到达的船是第一艘船和第二艘船,共有 4 + 2 = 64+2=6个乘客,分别是来自国家4,1,2,2,2,34,1,2,2,2,3,共来自44个不同的国家;第三艘船在第1...

2020-04-18 15:15:42 250

原创 P1540 机器翻译

此题数据量很小所以我使用的map来作为标记是否被选用,由于题目说了如果内存满了要抹去最开始的那个,所以我果断想到了队列STL大法好啊,用起来真爽,下面是AC代码~#include <iostream>#include <map>#include <queue>using namespace std;int M,N;//内存量和文章长度queue...

2020-04-16 23:36:02 118

原创 P1160 队列安排

此题也比较简单,也是一个很经典的序列问题,不过想AC,还是不是那么容易滴这道题要用链表来做,一开始我写的是动态链表,自己造轮子,写了一半代码接近两百行,果断放弃了,还是用静态的链表比较实在,考场上绝对不会有那么多时间给你去写动态的链表这道题首先要控制好时间复杂度,数据量还是挺大的,如果用一般的数组做法肯定会TL,所以只能制取,我们搞个结构体,里面有左右成员L,R,分别记录这个结构体元素左...

2020-04-16 22:40:16 97

原创 P1996 约瑟夫问题

此题很简单,可以算是模拟题也可以算是队列题,用队列更加简单,比较喜欢队列模拟AC代码~#include <iostream>#include <cstring>using namespace std;#define Max 1001 int main() { bool flag[Max]; memset(flag,...

2020-04-15 20:57:51 121

原创 P1449 后缀表达式

题目比较简单,唯一需要注意的地方是可能有连续的数,不是所有数字都是一位数!!因为这个点我卡住了一会儿,下面是AC代码~#include <iostream>#include <stack>using namespace std;int main(){ stack<int > num;// 操作数 string str; cin...

2020-04-15 18:05:32 122

原创 P3613 【深基15.例2】寄包柜

看完这题,第一反应是一个二维数组,不用说肯定凉凉~~~,机智如我,果断想到了STL中的Map,不禁感概STL大法好啊#include <iostream>#include <map>#define Max 100001using namespace std;struct Node{ int x;//柜子 map<int,int >...

2020-04-15 15:56:47 441

原创 P3156 【深基15.例1】询问学号

这种题本来不打算写博客的,还是写一下吧,长个心眼。数据大用Map会超时!!!!!数据大用Map会超时!!!!!数据大用Map会超时!!!!!#include <iostream>#include <map>#define Max 10000000using namespace std; int main() { int n,m...

2020-04-15 15:02:35 301

原创 P1032 字串变换

题目本身其实并不难,但是细节特别特别多。。。。,我因为细节问题踩坑踩了一个小时,自从接触了C++,真的很有感触STL大法好这道题使用广搜的算法,首先自然是一个结构体,里面存放当前字符串和到达当前字符串所需要的步数。首先将初始的字符串设置为A,当前步数设置为0,入队,开始广搜,每次从队列弹出一个元素,判断当前的字符串是否等于B并且当前到达当前的步数是否小于10,如果满足条件就保存结果退出,如果...

2020-04-15 13:38:17 120

原创 P1036 选数

这道题题目本身并不难,递归写法也很简单。难点在于判重,虽然题目很基础,但是,事实上很多难的题目都是在基础之上,这道题做回了,实际上很多题目都能触类旁通,我之前因为去重的问题被逼死了…下面画不下了,凑合看8~,从图中可以看到,这样写递归会有很多的重复,就比如3 7 12 和7 12 3 就是重复了,当然你也把所有满足条件的都保存起来,然后每满足一个就判断之前保存的所有结果中是否有和其重复的,但...

2020-04-14 17:01:16 169

原创 P2404 自然数的拆分问题

说明/提示用回溯做。。。。N<=8题目本身倒不难,但是这道题真的把我坑死了…, 可能是还掌握的不太好,看到这种题目很快联想到之前做过的一题,给定 n个数,从中选出任意个数可以组合成 m 这n个数字中的那些数字可以重复选择,我灵机一动,这不就是和那题是一样的吗,给定n-1个数,分别为1----n-1,从中选出任意个数字使其和为n,就拿n=4来举例子8~不太会画画,凑合看8~从图中...

2020-04-14 12:44:41 274

原创 P1825 [USACO11OPEN]Corn Maze S 题解

这道题就是一道普通的搜索题,非常非常普通,普通的不能再普通那种,和以前的bfs一样,不过这个bfs要注意一个特判,当弹出的那个元素的是大写字母的时候,要窜梭到对应的大写字母,并且穿梭到了另外一个大写字母以后要将其标记为true,以为之前我们是入队才标记为true,但是这里我们只要一遇到大写字母就要穿越(也就是一遇到大写字母就要改变其坐标,到另一个大写字母的坐标),其他的和一般的搜索题都一样,...

2020-04-11 13:38:44 765

原创 P1162 填涂颜色

这道题想上去就很简单~思路:将城墙外的0全部涂成3,然后输出的时候如果是0就输出2,如果是3就输出0,如果是1就原样输出,下面是AC代码#include <iostream>#include <cstring>using namespace std;#define Max 666void dfs(int x,int y);int matrix[Max][M...

2020-04-10 14:55:35 67

原创 P1596 [USACO10OCT]Lake Counting S

本题比较简单,直接dfs即可,如果发现有水涡W,就将相连接的水涡全部设置为.下面是AC代码~#include <iostream>#include <cstring>using namespace std;#define Max 666char water[Max][Max];int N,M;int pos[9][3]={{0,0,0},{0,-1,0...

2020-04-09 22:27:47 477

原创 P1101 单词方阵

这道题思路还比较简单~直接dfs即可思路:输入完 n*n的单词以后,开始逐行逐列的枚举,如果找到其中一个是y,那就观察y的8个方向,看看哪一个是 i,然后顺着yi的方向看看能不能找到一条完整的yizhong,如果能找到就将这条路径全部标记为true,到时候输出的时候可以输出这些字符,反之如果不能连续7个yizhong就没必要标记了如果所示,只有连续的7个“yizhong”这几个字母我们才...

2020-04-09 14:48:58 135

原创 P1605 迷宫

题目比较简单 直接dfs,当然也可以用bfs来做,dfs更加简单,明了。我们还是用dfs吧~这里有个要注意的点,题目没有说迷宫的坐标是从0开始还是从1开始,这个时候你要去看一下样例,很明显样例会告诉你数组下标从1开始.下面是AC代码~#include <iostream>#include <cstring>#include <utility>usin...

2020-04-08 19:06:39 144

原创 P1433 吃奶酪

这道题大佬貌似都用的状压dp,可惜我不会…还没系统学习dp,只会一点皮毛,虽然不会状压dp,但我会暴搜,暴搜的思路就很简单了,其实就是一个全排列的问题,找出排列路径最短的那一个就是答案,现在的数据好像被加强了,最后一个点TL,dfs+剪枝只有90分,最后一个点我日后学完状压dp再用状压dp写一份,下面是90分代码~(大佬请无视)#include <iostream>#includ...

2020-04-08 17:55:58 174

原创 P2036 Perket

这道题一看就是DFS,直接上代码吧~#include <iostream>#include <vector>#include <cstring>#include <cmath>#include <utility>#define Max 666using namespace std;bool flag[Max];int...

2020-04-08 13:53:20 274

原创 P2895 [USACO08FEB]Meteor Shower S

这道题也是很简单的广搜模板题,题目比较简单,但是有些坑。思路:我们初始化一个数组,然后将流星到达的时间填入,其他没有流星的地方就是-1 ,这里一定要注意:只有当此时被流星砸中的时间小于上次被流星砸中的时间,或者其没有被砸中过,我们才能更新时间~,就比如下面这个例子:21 2 12 1 2** 他的数组应该是这样的**可以看到,流星首先在时间1 砸中的是(1,2),周围4块土地编程...

2020-04-08 09:24:32 118

原创 P1135 奇怪的电梯

这道题比较简单,直接DFS即可,但是,一定要剪枝,不剪枝就凉凉~我是绝对不会告诉你因为没有剪枝最后两个点A不动,下面是AC代码:#include <iostream>#include <cstring>using namespace std;#define Max 666int N,A,B;bool flag[Max];void dfs(int leve...

2020-04-06 22:55:26 156

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除