自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

姚军

富贵非吾愿,帝乡不可期。怀良辰以孤往,或植杖而耘耔。

  • 博客(65)
  • 收藏
  • 关注

原创 1126 Eulerian Path (25 分)

题目很容易懂,就是判断一个无向图是否是欧拉图,或者半欧拉图,或者不是欧拉图。有两个输出,第一行输出每个顶点的度,其实是提示从度这里入手。其次有个细节需要注意的是,欧拉图需要连通,所以要判断整个图是否连通。因为我自己写图的深度太弱,所以一上去提交就出错了。这里有两种找图深度的写法。AC代码里是一种,这里另外再贴一种。其实就是初始值和自增位置的区别。DFS记录深度int depth=1;...

2019-02-26 18:12:32 155

原创 1086 Tree Traversals Again (25 分)

一道给出前序和中序遍历的结果,重构二叉树并返回后序遍历的结果。需要主要的地方是好好理解题目意思#include<cstdio>#include<cstring>#include<vector>#include<stack>#include<iostream>using namespace std;vector<int...

2019-02-26 16:10:43 224

原创 1102 Invert a Binary Tree (25 分)

这道题感觉挺有意思的,考查了二叉树的层序遍历和中序遍历。需要注意的地方:1.标记空结点2.交换左右子树后层序遍历和中序遍历3.找树根#include<cstdio>#include<vector>#include<iostream>#include<cstring>#include<queue>using namesp...

2019-02-26 15:22:51 178

原创 1115 Counting Nodes in a BST (30 分)

这道题我最开始题目理解错了,最开始我理解成了统计叶子节点和叶子节点的上一层的结点数量。一提交得了2分,这时我知道我题目肯定读错了。后来又做了一次,然后提交得了8分,我实在想不出有什么地方没写对,但是就是通不过。后来认真读了一遍题目,才发现这个二叉搜索树种有重复数值的结点,而且要按照题目,把小于等于根结点的数据放在左子树,我想当然的放在了右子树,所以导致了错误,后来把这个错误改正过来了,一提交,...

2019-02-26 13:44:42 168

原创 1122 Hamiltonian Cycle (25 分)

题目叫做哈密尔顿环其实判断起来特别容易,首先判断是否所有的顶点都出现了一次,然后判断是否起点和终点都相同,再看每条边是否都在原来的图中存在,有个细节的地方说,这是一个简单的回路,所以不能有两个环或以上的环,因此每个顶点的出现次数最多不超过2,超过2的当然也只有起点和终点这个点,因为测试数据可能比较简单,所以暂且这样考虑就可以通过。#include<cstdio>#include&...

2019-02-26 10:59:14 228

原创 1043 Is It a Binary Search Tree (25 分)

很棒的题,把BST和二叉树遍历都考查到了。主要知识点有一下几个方面:1.向量可以直接通过等号判断是否相同。2.树的插入需要用引用,特别是插入结点时,需要先申请空间。root = new node3.最开始的根结点可以不申请空间,而只创建出一个空指针。注意,一定要是空指针。node* root = NULL4.所谓镜像BST就是交换了左右子树,如果理解了遍历的含义,就能灵活的转变...

2019-02-25 21:22:15 160

原创 1070 Mooncake (25 分)

这道题是我接触得最早得贪心算法题,但是没想到这次做还是有个测试点没过去。主要是样例给得数据让我主观得认为,总量一定是整数。然后我反复得读题目,似乎也没发现这里隐藏得陷阱。出题人这样搞我们真的不怕下雨天被雷带走吗?#include<cstdio>#include<algorithm>using namespace std;const int maxn = 1e3...

2019-02-25 17:09:44 308 2

原创 1039 Course List for Student (25 分)

C的输入输出和C++的输入输出最好不要混用,不然比单用C++更耗时,总的来说,用C最快。这里使用unordered_map可以稍微快一点,但是经过测试,使用map也能通过,只不过是险过。#include<cstdio>#include<iostream>#include<vector>#include<unordered_map>#incl...

2019-02-25 16:11:05 202

原创 1047 Student List for Course (25 分)

第一次提交用的map映射,最后有个测试点超时,我以为时cout输出导致的,后来想了一下才发现有更简单的方法做出来,所以这个超时是必然的。这里直接用vector记录名字就完成了。再sort函数中,如果不自定义比较方式,通常是按照字符串的字典序排列的。#include<iostream>#include<cstdio>#include<set>#incl...

2019-02-25 15:09:06 219

原创 1058 A+B in Hogwarts (20 分)

这道题可以说是相当简单了,我还是有个测试点没过,后来想了一下才弄懂。最开始的时候,我把abc,xyz都设定为整形,然后后面有计算的部分,而计算中没有自动转换为长整形的暗示,所以导致在计算sum的时候溢出了,最后结果当然也是错误的。所以以后得到一个教训,凡是需要用到长整型的题目,全部改为用long long#include<cstdio>#include<cstring&g...

2019-02-25 12:16:06 379

原创 1092 To Buy or Not to Buy (20 分)

这道题是散列的题,可以用hash数组解决,但是学过标准库之后就变懒了,懒得把字符转换为下标,还要判断是数字还是大小写字母,所以索性就用map直接映射了。然后本题还用到了C++11标准中的基于范围的遍历,特别好用。#include<cstdio>#include<iostream>#include<string>#include<map>us...

2019-02-25 11:46:36 313

原创 1075 PAT Judge (25 分)

教训:初始化已知的内容1.通常来说是数组2.其次给出总数量的序号这道题是真的有问题,最开始我把标记设错了,后来改正确一直在最后一个测试点卡着。我考虑到了另一种情况,但是本题似乎没有涉及:即第一次提交通过编译并有得分,但是第二次出现了编译错误的记录,这个时候是不能覆盖原得分的,但是后来认真一想,这种情况确实可能存在,即第一次只得了部分分,后来换种写法导致了编译错误。另一个让我奇怪的地方...

2019-02-24 19:50:39 243

原创 1055 The World's Richest (25 分)

需要剪枝,不然会超时。即最多输出m个人之后,就不需要再继续查询了。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int maxn = 1e5+5;struct node{ char na...

2019-02-24 15:23:51 140

原创 1120 Friend Numbers (20 分)

过于简单,建议用set#include<iostream>#include<cstdio>#include<set>using namespace std;int main(){ int n,num; set<int> st; st.clear(); scanf("%d",&n); for(int i=0;i<n;i...

2019-02-24 13:48:16 146

原创 1031 Hello World for U (20 分)

建议用string来处理这里的最大化就理解为均分#include<string>#include<iostream>using namespace std;int main(){ string str; cin>>str; int n1,n2; int N = str.size(); n1=(N+2)/3; n2 = N + 2 - n1*...

2019-02-24 13:33:43 175

原创 1073 Scientific Notation (20 分)

思路不是很清晰,但是通过了,很神奇!对正指数的处理分两种情况:1.有效数字不足时补零2.指数补全后还存在小数的情况#include<cstdio>#include<iostream>#include<string>using namespace std;int main(){ string str; cin>>str; if(s...

2019-02-24 12:30:27 211

原创 特殊图

1.行遍所有的边:欧拉图(E图)2.行遍所有的顶点:哈密尔顿图(H图)欧拉图Theorem设G是一个无向或有向图,若存在一条通路(回路),经过图中每边一次且仅一次,则称此通图(回路),为欧拉通路(回路),具有欧拉回路的图称为欧拉图。Corollary1.无向图G=<V, E>具有一条欧拉通路,当且仅当G是连通的,且仅有零个或两个奇度数结点。2.无向图G=<V, E&...

2019-02-19 10:37:27 433

原创 任意个数异或最大值(DFS)

问题: 在N<=10个数里面选任意个数,使得他们的xor值最大思路1:最简单的办法是O(2n2^n2n)去暴力枚举思路2:DFS对于这个问题,其实可以看成N个阶段,每个阶段我对于每个数都有选与不选两种选择,那么我们dfs不妨就写成dfs(int step, int value)表示我们现在正在考虑的第step个数,前面选的数xor起来等于value#include<cstdio...

2019-02-18 13:02:10 1687 2

原创 过山车【HDOJ2063】

匈牙利算法核心思想:匹配之后,找可修改的匹配,不断回溯。时间复杂度O(n3n^3n3)注意:邻接矩阵和girl的初始化#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn = 510;int line[maxn][maxn],...

2019-02-18 11:58:30 150

原创 1077 Kuchiguse (20 分)

使用string来处理比较方便同时注意在使用getline的时候,要把前面scanf或者cin没有吸收的换行符用getchar吸收掉#include<iostream>#include<string>#include<cstdio>using namespace std;int main(){ int n; scanf("%d",&n);...

2019-02-16 21:02:24 147

原创 1035 Password (20 分)

今天做题十分不在状态,这道题本来相当简单,但是我TM又看错题了。我在字符判断的时候,把l看成了一,导致我以为是标准库用错了,又换了纯C的写一遍,结果发现还是有问题,最后看了别人的代码才发现,原来是题目没看清,心不在焉,效率减半。#include<iostream>#include<vector>#include<string>using namespa...

2019-02-16 20:36:16 218

原创 1042 Shuffling Machine (20 分)

调换顺序,注意手动演示一下过程。关键步骤:arr[sh[i]] = oldArr[i]为了避免对arr的覆盖,所以需要另定一个数组,用来保存arr的数据#include<cstdio>#include<vector>#include<cstring>#include<string>#include<iostream>us...

2019-02-16 19:47:12 193

原创 1046 Shortest Distance (20 分)

方法1先用数组记录前缀后,然后减去两者的差值。由于数组形成的是个环,所以累加和是固定的,反方向的距离实际就等于总长度减去正向的长度。#include<cstdio>const int maxn=1e5+5;int cost[maxn];int dp[maxn];int n;void swap(int& x,int& y){ int t=x;x=y;y...

2019-02-16 18:04:40 179

原创 1063 Set Similarity (25 分)

考查set的模板题要注意的地方是查询两个集合中是否有相同元素时,可以只用一次循环,同时利用find函数来实现。如果使用map来映射会超时。#include<cstdio>#include<set>#include<iostream>#include<map>using namespace std;const int maxn=55;i...

2019-02-16 14:32:25 160

原创 1041 Be Unique (20 分)

简单题可以用散列,也可以用map#include<cstdio>#include<map>using namespace std;const int maxn=1e4+5;int arr[maxn];int main(){ int n; map<int,int> mp; scanf("%d",&n); for(int i=0;i&l...

2019-02-16 13:06:24 152

原创 1038 Recover the Smallest Number (30 分)

显然这是道贪心题关键是怎么贪,第一想法是根据数字的大小从大到小排列,显然不行。这里是要组成字符串,所以要根据两者形成的字符串来从小到大排列。具体视频可以看左神的初级算法课程注意点:第一个数字不能是0,所以要进行判断,也有可能第一个子数据全是0,同理也可能是前两个串都为0,最终,所有串都可能为0,如果一般的程序,此时没有任何输出。但是第三个测试点是,在所有数据都是0的情况下,需要输出一个0...

2019-02-16 11:59:00 210

原创 1016 Phone Bills (25 分)

我之所以直接把代码贴上来,而没有太多解释,不是为了解析这道题目,而是为了方便我以后自己查看。这道题花了两个小时都没做出来,最后看了答案才知道,可以用map与向量的映射,这是第一次用,所以学到了。其次是不知道怎么算时间的差值和根据每个阶段的费用求结果。方法有2:1.直接求起始日期时间与终止日期的差值2.求当前日期与每月1号的相对差值,然后两个日期的相对差值相减就是绝对差值while(sta...

2019-02-16 11:32:09 374

原创 1029 Median (25 分)

真是是一道很搞人的题1.数据能从1开始的,好确定中间位置2.第一个数组离线,第二个数组在线处理#include<cstdio>const int maxn = 2e5+10;const int INF = 0x7fffffff;int a[maxn];int main(){ int n,m,num; scanf("%d",&n); for(int i=1;...

2019-02-15 15:48:02 181

原创 1071 Speech Patterns (25 分)

#include<cstdio>#include<map>#include<cctype>#include<cstring>#include<iostream>#include<string>using namespace std;char st[1048596],key[1048596];int main...

2019-02-15 12:58:28 154 1

原创 1054 The Dominant Color (20 分)

map的模板题注意:增加变量V的技巧可以减少对map遍历求最值#include<cstdio>#include<map>using namespace std;int main(){ int n,m,num,V=0; map<int,int> mp; scanf("%d%d",&n,&m); for(int i=0;i<...

2019-02-15 12:11:11 166

原创 1022 Digital Library (30 分)

注意:1.书名是7位数,需要补零。2.题目要求按照从小到大输出书名,所以用set比较好。3.关键字的读入技巧要学到。4.对参数使用引用会稍微快点。//map的应用 #include<cstdio>#include<iostream>#include<map>#include<set> #include<algorithm&g...

2019-02-15 11:55:58 766 1

原创 1024 Palindromic Number (25 分)

大整数加法最开始我以为long long就足够了,结果提交的时候有两个测试点没通过,紧接着我考虑用大整数加法,但是第一遍提交还是错了,我以为代码写错了,后来发现是数组开小了。#include<cstdio>int arr[200],b[200];long long n,K;bool check(int k){ for(int j=0;j<=k/2;j++){ i...

2019-02-15 11:05:52 284

原创 1019 General Palindromic Number (20 分)

思路:先把十进制转换为r进制,转换的过程中,从逆向求该进制的十进制数,如果逆向结果与原数结果一致,则说明这个数字对称。#include<cstdio>int main(){ int num,r; scanf("%d%d",&num,&r); int arr[22]; int k=0,tmp=num,sum=0; do{ arr[k]=num%r; ...

2019-02-15 09:42:13 306

原创 最近公共祖先

倍增LCA时间和空间复杂度分别是 O((n+q)logn) 和 O(nlogn) 。1.DFS求每个节点的深度2.倍增跳跃祖先节点预处理3.如果两节点不在同一高度,则让较深的高度u跳跃到较浅的高度v来。4.两个节点同时跳跃,先从大的跳跃幅度开始。5.直到最后跳跃到最近公共祖先的下一层为止#include<cstdio>#include<algorithm>...

2019-02-14 23:24:30 114

原创 拓扑排序(最长路径)

题目链接:计蒜客每次记录出度为零的顶点,加上出度边的最大值,作为下一个到达顶点的最大值,不断更新dp数组,然后从数组中找到一个最大值,就是整个图的最长路径。详情请观看B站大佬视频#include<cstdio>#include<utility>#include<vector>#include<queue>#include<cstr...

2019-02-14 21:41:27 3017

原创 #1175 : 拓扑排序·二

题目链接:hihocoder注意:病毒对所有的出度边都复制一份自身的内容当自身入度为0之后,病毒的数量就不会再改变。坑点:病毒数量求和的时候,要边加边取模。#include<cstdio>#include<vector>#include<queue>#include<algorithm>#include<cstring&gt...

2019-02-14 19:58:42 146

原创 #1174 : 拓扑排序·一

题目链接:hihocoder一道拓扑排序的模板题拓扑排序的步骤为:1.定义一个队列,并把所有入度为0的节点加入队列2.取出队首节点,然后删去从它出发的边,并令这些边到达的定点入度减1,如果某个顶点入度减为0,则将其加入队列。3.反复进行2操作,直到队列为空。4.如果队列为空时,入过队的节点数目恰好为N,说明拓扑排序成功,图为有向无环图;否则拓扑排序失败,图中有环。#include&l...

2019-02-14 19:21:59 158

原创 树状数组

树状数组——解决动态前缀和问题的数据结构//树状数组下标必须从1开始 #include<cstdio>const int maxn = 1e+5;int C[maxn],A[maxn];int n; int lowbit(int x){ return x&(-x);} int query(int x){ //查询A[x]前面的和 int res=0;...

2019-02-14 15:46:46 133

原创 1021 Deepest Root (25 分)

DFS似乎找到了PAT的一些规律,如果考的是数据结构里面的东西,就很少有坑。而如果考的模拟或者简单的题,就有很多边界条件。使用了两个全局变量,记录每个起点遍历的最大深度和所有顶点的最大深度。一次性AC,还是比较开心的!#include<cstdio>#include<vector>#include<cstring>using namespace ...

2019-02-13 18:09:31 521

原创 1036 Boys vs Girls (25 分)

这种排序查找的题太多了对于我现阶段来说并没有特别大的提升,但是为了提交AC时爽一下,我还是再刷了一遍。#include<cstdio>#include<string>#include<iostream>using namespace std;int main(){ int n; cin>>n; string namef,idf,na...

2019-02-13 16:58:58 167

空空如也

空空如也

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

TA关注的人

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