![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 105 阅读 · 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 · 89 阅读 · 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 · 109 阅读 · 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 · 104 阅读 · 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 · 159 阅读 · 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 · 108 阅读 · 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 · 119 阅读 · 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 · 87 阅读 · 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 · 116 阅读 · 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 · 101 阅读 · 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 · 114 阅读 · 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 · 118 阅读 · 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 · 143 阅读 · 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 · 98 阅读 · 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 · 115 阅读 · 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 · 108 阅读 · 0 评论 -
A1119 Pre- and Post-order Traversals (30) 前序后序转中序
本题前导:https://blog.csdn.net/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 · 111 阅读 · 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 · 83 阅读 · 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 · 109 阅读 · 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 · 165 阅读 · 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 · 182 阅读 · 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 · 127 阅读 · 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 · 216 阅读 · 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 · 106 阅读 · 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 · 124 阅读 · 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 · 88 阅读 · 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 · 86 阅读 · 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 · 110 阅读 · 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 · 101 阅读 · 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 · 71 阅读 · 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 · 85 阅读 · 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 · 169 阅读 · 0 评论