
pat刷题
文章平均质量分 76
本分类主要是作者进行pat整体刷题时的思路与解题方法
coder_Kim
这个作者很懒,什么都没留下…
展开
-
A1151 LCA in a Binary Tree (30)
map很容易超时,找到一个位置之后把它记录下来再进行比较。本题思路,用pos表示各数在中序排列中的位置。如果一左一右,则当前根节点就是lca。#include<cstdio>#include<iostream>#include<map>using namespace std;const int maxn=10010;int in[maxn],pre[maxn];map<int,int> pos;void Lca(int inl,int inr原创 2020-07-25 11:51:49 · 138 阅读 · 0 评论 -
A1150 Travelling Salesman Problem (25)
写的有些复杂,后续会修改#include<cstdio>#include<iostream>using namespace std;const int maxn=210;const int inf=0x3fffffff;int G[maxn][maxn],a[maxn];bool vis[maxn]={false};int main(){ int N,m; cin>>N>>m; fill(G[0],G[0]+maxn*maxn,inf)原创 2020-07-24 23:02:08 · 130 阅读 · 0 评论 -
A1149 Dangerous Goods Packaging (25)
写题的时候有点着急了,其实对于fill这个数组可以有更好的处理#include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn=1001000;bool vis[maxn]={false};vector<int>G[maxn];int main(){ int n,m; cin>>n>>m; for(int i=原创 2020-07-24 22:07:43 · 142 阅读 · 0 评论 -
A1147 Heaps (30) 堆
本题思路:层序遍历建树;建树的同时通过两个flag的值,flag1为大顶堆成立,flag2为小顶堆成立,判断的时候如果既是大顶堆又是小顶堆,说明不是堆;后序遍历节点;#include<iostream>#include<cstdio>using namespace std;const int maxn=1010;int a[maxn],num,n,m;bool flag,flag1,flag2;struct node{ int data; node *lc,原创 2020-07-24 15:48:11 · 137 阅读 · 0 评论 -
A1146 Topological Order (25) 拓扑排序,vector用法
本题刚开始在做的时候也考虑到了这种方法,但是不知道vector的这种用法,之后参考了柳婼前辈的做法,就做出来了,本题难点在怎么保存入度,以及入度是怎么赋值到临时变量中去的。#include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn=1010;int in[maxn];vector<int> v[maxn];vector<int&g原创 2020-07-24 15:14:14 · 208 阅读 · 0 评论 -
A1144 The Missing Number (20) map
#include<cstdio>#include<iostream>#include<map>using namespace std;map<int,int> mp;int main(){ int n,num; cin>>n; for(int i=0;i<n;i++) { scanf("%d",&num); if(num>0) mp[num]=1; } for(int i=1;i<=n+原创 2020-07-22 23:01:20 · 137 阅读 · 0 评论 -
A1129 Recommendation System (25) 逻辑///排序
本题刚开始采用的结构体的方式处理这个问题,但是最后导致了3、4两例出现了超时错误,在看了一些同学的分享之后,得出了如下的解法,解法有点类似于缩减样本空间,本来每次都需要排序的,缩减之后变成了每次只有排前面的四个就好,第四个即为当前的输入数据。#include<cstdio>#include<algorithm>using namespace std;const int maxn=50010;bool hashtable[maxn]={false};int value[ma原创 2020-07-19 16:22:10 · 157 阅读 · 0 评论 -
A1128 N Queens Puzzle (20) n皇后
#include<cstdio>#include<iostream>using namespace std;int a[1001];int main(){ int n,m; bool flag; cin>>n; for(int i=0;i<n;i++) { scanf("%d",&m); flag=true; for(int j=1;j<=m;j++) { scanf("%d",&a[j]); f原创 2020-07-18 19:22:06 · 128 阅读 · 0 评论 -
A1127 ZigZagging on a Tree (30分) 中序后序建树(***)
本题涉及到层序遍历和中序后序建树的问题;关于z型输出,可以先存在vector中,利用层数的奇偶性来判断是正向输出还是逆向输出;#include<cstdio>#include<iostream>#include<vector>#include<queue>using namespace std;const int maxn=40;int n,in[maxn],post[maxn],maxl=-1,num=0;struct node{ in原创 2020-07-16 19:53:37 · 194 阅读 · 1 评论 -
A1126 Eulerian Path (25) 图的连通性的判断(**)
本题要注意判断图是否是连通图,图是否为连通图的办法要掌握;#include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn=520;vector<int> a[maxn];int degree[maxn]={0},cnt=0;bool vis[maxn]={false};void DFS(int x){ vis[x]=true; cn原创 2020-07-16 18:39:13 · 134 阅读 · 0 评论 -
A1125 Chain the Ropes (25) 贪心
注意题目要求这些片段都要用上,因为刚开始的时候折叠的次数多,所以采用贪心策略,先排序,再得出结果。#include<cstdio>#include<algorithm>using namespace std;const int maxn=10100;int a[maxn];int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]);原创 2020-07-16 17:49:37 · 151 阅读 · 0 评论 -
A1124 Raffle for Weibo Followers (20) map的一般用法(**)
map一般不怎么用到,但是典型例题的典型写法一定要掌握到,避免考试的时候蒙圈#include<cstdio>#include<map>#include<iostream>#include<string>using namespace std;const int maxn=1010;string str[maxn];map<string,int> mp;int main(){ int m,n,s; bool flag=fals原创 2020-07-16 17:30:05 · 148 阅读 · 0 评论 -
A1123 Is It a Complete AVL Tree (30) AVL完全二叉树
#include<cstdio>#include<iostream>#include<queue>using namespace std;int k=0,n,num;;struct node{ int id,height; node *lchild,*rchild;};int getheight(node *root){ if(root==NULL) return 0; else return root->height;}int原创 2020-07-16 11:54:37 · 185 阅读 · 0 评论 -
A1122 Hamiltonian Cycle (25) 图?
#include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn=220;bool hash1[maxn]={false};int hashtable[maxn][maxn]={0};int iq[maxn];int main(){ int n,m,k,num; bool flag; cin>>n>>m; for(int原创 2020-07-15 22:40:35 · 133 阅读 · 0 评论 -
A1121 Damn Single (25) Map的常见用法(原理相同)
#include<cstdio>#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxn=100010;vector<int> ans;int a[maxn],b[maxn];bool hashtable[maxn]={false};int main(){ int n,m,c1,c2,c; cin>&g原创 2020-07-15 21:38:58 · 159 阅读 · 0 评论 -
A1120 Friend Numbers (20) 简单题
#include<cstdio>#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<int> ans;bool hashtable[40]={false};int change(int x){ int i=0; while(x>0) { i+=(x%10); x/原创 2020-07-15 19:27:43 · 136 阅读 · 0 评论 -
A1119 Pre- and Post-order Traversals (30) 前序后序转中序
本题前导:https://blog.youkuaiyun.com/destiny_balabala/article/details/99352715;本题假设是如果判断不了,设该结点为右边的结点。#include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn=30;bool flag=false;int post[maxn],pre[maxn];vector&l原创 2020-07-15 19:15:02 · 148 阅读 · 0 评论 -
A1118 Birds in Forest (25) 并查集
#include<cstdio>#include<iostream>using namespace std;const int maxn=10010;int father[maxn],isroot[maxn]={0};bool hashtable[maxn]={false};void init(){ for(int i=0;i<maxn;i++) { father[i]=i; }}int findfather(int x){ int a=x;原创 2020-07-15 16:21:41 · 118 阅读 · 0 评论 -
A1117 Eddington Number (25) 逻辑题
#include<cstdio>#include<iostream>using namespace std;const int maxn=100010;int hashtable[maxn]={0};int main(){ int n,r; cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&r); if(r>n) { hashtable[n]++; } else原创 2020-07-15 13:18:21 · 157 阅读 · 0 评论 -
A1116 Come on! Let‘s C (20) 逻辑题
#include<cstdio>#include<iostream>#include<cmath>using namespace std;const int maxn=100001;bool vis[maxn]={false},is[maxn]={false};int a[maxn],Id[maxn];bool isprime(int x){ for(int i=2;i<=sqrt(x);i++) { if(x%i==0)原创 2020-07-15 12:28:13 · 208 阅读 · 0 评论 -
A1111 Online Map (30) 图的遍历dijkstra+DFS
三个注意点:1、本题没有采用vector的形式做前导的赋值,vector不能直接赋值,而要采用pushback()的方式赋值;2、本题题目,第三个数为0的时候代表有两条路,而不是不通;3、本题第三个测试点错误的话,再读一遍题目关于时间相同的话的做法,是结点数目最小,而不是距离最小,一定要认真读题。#include<cstdio>#include<iostream>#include<vector>using namespace std;const int m原创 2020-07-13 19:24:12 · 220 阅读 · 0 评论 -
A1110 Complete Binary Tree (25) DFS,逻辑题,完全二叉树的一般判别方法
做本题的时候先考虑用层序,但是没有思绪,又转为考虑DFS的解法,pat的很多解法是双重标注的方法,在做题的时候需要认真想明白index和root分别指向的是当前的位置和当前的元素,两者通过元素访问,index通过访问变化。本题是DFS解法,但是和前面的逻辑题本质无差别。本题的另外一个需要注意的事项是,因为访问元素可能超过10,这时不能再用char来接受了。DFS解法#include<cstdio>#include<iostream>using namespace std;原创 2020-07-13 12:23:52 · 161 阅读 · 0 评论 -
A1109 Group Photo (25) 拍照(逻辑题)
观察本题的队伍的排列,应该从中间分为左右两侧进行计算,先左后右进行填充。需要注意一点:题目中给出的ans要加上规模大小,不加的话本题会出现段错误;#include<cstdio>#include<string>#include<iostream>#include<algorithm>#include<vector>using namespace std;const int maxn=10010;struct node{ str原创 2020-07-13 11:14:54 · 281 阅读 · 0 评论 -
A1108 Finding Average (20) sscanf和sprintf
本题需要掌握sscanf和sprintf的用法;此外注意ansnum为0,1时的特殊输出#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn=50;char a[maxn],b[maxn];int main(){ int n,ansnum; double num,sum=0; cin>>n; ansnum=n; fo原创 2020-07-12 17:31:55 · 147 阅读 · 0 评论 -
A1107 Social Clusters (30) 并查集(本题有一个易错点)
合并完成之后,也有可能出现当前节点的父节点没有及时变化的情况,所以isroot里面的是findfather,而不是father数组的形式#include<cstdio>#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxn=1010;int course[maxn]={0};int father[maxn];int isro原创 2020-07-12 17:05:08 · 180 阅读 · 0 评论 -
A1106 Lowest Price in Supply Chain (25) 树的遍历
#include<cstdio>#include<iostream>#include<vector>const int maxn=100100;using namespace std;int n,num,mindepth=maxn;double p,r,ans=1;struct node{ int id; vector<int>child;}a[maxn];void DFS(int depth,int index,double nowr原创 2020-07-12 11:23:29 · 117 阅读 · 0 评论 -
A1105 Spiral Matrix (25) 快乐模拟
本题注释部分需要好好注意,处理的时候避免相互覆盖#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn=10010;int a[maxn][maxn],origin[maxn];bool cmp(int b,int c){ return b>c;}int main(){ int原创 2020-07-12 11:01:34 · 118 阅读 · 0 评论 -
1104 Sum of Number Segments (20) 数学问题(找规律)(代码数据更新后)
#include<cstdio>int main(){ int n; scanf("%d",&n); long double ans=0,v; for(int i=1;i<=n;i++) { scanf("%llf",&v); ans+=v*i*(n-i+1); } printf("%.2llf",ans);}原创 2020-07-12 10:20:14 · 157 阅读 · 0 评论 -
A1103 Integer Factorization (30) DFS (X)
因为本题有一个index变成index-1的过程,所以这个index一定要大于0,而index内容最小的值为1,所以要注意v的取值#include<cstdio>#include<iostream>#include<vector>#include<cmath>using namespace std;int n,k,p,maxF=-1;vector<int> v,ans,temp;void init(){ int t=0,cnt=原创 2020-07-11 21:14:57 · 133 阅读 · 0 评论 -
A1102 Invert a Binary Tree (25) 树的遍历
1、涉及字符的时候输入需要注意;2、本题因为有队列,所以要设置一个node里面要设置一个id,如果只涉及中序遍历的话,可以不用这个参数。#include<cstdio>#include<queue>#include<iostream>using namespace std;const int maxn=20;bool hashtable[maxn]={false};int n,cnt1=0,cnt2=0;struct node{ int lchild原创 2020-07-11 18:44:10 · 104 阅读 · 0 评论 -
A1101 Quick Sort (25) 快速排序 (4.7节内容)
#include<cstdio>#include<vector>#include<iostream>#include<algorithm>using namespace std;const int maxn=100010;int origin[maxn],a[maxn];vector<int> ans;int main(){ int n; cin>>n; for(int i=0;i<n;i++) {原创 2020-07-11 12:07:00 · 119 阅读 · 0 评论 -
A1100 Mars Numbers (20) Map的用法(两种解法)
先给出第一种解法:#include<cstdio>#include<string>#include<iostream>using namespace std;string str1[13] = {"tret","jan", "feb","mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};string str2[13] = {"tret","tam", "hel", "maa原创 2020-07-11 11:53:44 · 234 阅读 · 0 评论