PAT题目答案与经验总结1(持续更新,大家放心关注)
PAT—甲级
- 1115 Counting Nodes in a BST (30 分)
- 题目链接
- AC代码
- 注意事项
- 1139 First Contact (30 分)
- 题目链接
- AC代码
- 注意事项
- 1142. Maximal Clique (25分)
- 题目链接
- AC代码
- 注意事项
- 1143 Lowest Common Ancestor (30 分)
- 题目链接
- AC代码
- 注意事项
1115 Counting Nodes in a BST (30 分)
题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/994805355987451904
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef struct node * tree;
struct node{int val;tree left,right;
};
unordered_map<int,int> cnt;
int pos=1;
tree insert(int t,tree root)
{if(root==NULL){root = new node();root->val=t;root->left=root->right=NULL;}else if(t<=root->val)root->left=insert(t,root->left);else if(t>root->val)root->right=insert(t,root->right);return root;
}void bfs(tree root)
{queue<tree> q;q.push(root);tree last=q.back();while(q.size()){tree t=q.front();q.pop();if(t->left!=NULL) q.push(t->left);if(t->right!=NULL) q.push(t->right);cnt[pos]++;if(t==last){pos++;last=q.back();}}
}void dfs(tree root,int depth)
{if(!root){pos=max(pos,depth);return;}cnt[depth]++;dfs(root->left,depth+1);dfs(root->right,depth+1);
}int main()
{int n,t;cin>>n;tree root=NULL;while(n--){cin>>t;root = insert(t,root);}
// bfs(root);dfs(root,1);printf("%d + %d = %d",cnt[pos-1],cnt[pos-2],cnt[pos-1]+cnt[pos-2]);
}
注意事项
root->left=insert(t,root->left);
这行代码的函数命insert我一开始竟然没写,确实是好久没建树了,考试前要注意练习- dfs中当节点为NULL时,必须要写return,否则无法退出
- 这道题dfs和bfs均可,建议大家都尝试一下
1139 First Contact (30 分)
题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/994805344776077312
AC代码
#include<bits/stdc++.h>
using namespace std;
struct node{int f1,f2;
};
unordered_map<int,int> gender,team;
unordered_map<int,vector<int>> f;
bool cmp(node x,node y){return x.f1!=y.f1?x.f1<y.f1:x.f2<y.f2;
}
int main()
{int n,m,k;cin>>n>>m;while(m--){string s1,s2;int t1,t2,flag1=1,flag2=1;cin>>s1>>s2;if(s1[0]=='-') flag1=-1;if(s2[0]=='-') flag2=-1;t1=abs(stoi(s1));t2=abs(stoi(s2));gender[t1]=flag1;gender[t2]=flag2;f[t1].push_back(t2);f[t2].push_back(t1);team[t1*10000+t2]=team[t2*10000+t1]=1;}cin>>k;while(k--){vector<node> ans;int t1,t2;cin>>t1>>t2;t1=abs(t1),t2=abs(t2);for(int i=0;i<f[t1].size();i++){for(int j=0;j<f[t2].size();j++){int f1=f[t1][i],f2=f[t2][j];if(f1==t2||f2==t1) continue;if(team[f1*10000+f2]&&gender[f1]==gender[t1]&&gender[f2]==gender[t2])ans.push_back({f1,f2}); }}sort(ans.begin(),ans.end(),cmp);cout<<ans.size()<<endl;for(int i=0;i<ans.size();i++)printf("%04d %04d\n",ans[i].f1,ans[i].f2);}
}
注意事项
- 之所以在输入阶段大费周章采用字符串判断正负,就是为了对0000做判断,因为如果整数判断,0本身的正负无法确定(即-0000无法判断)
- A爱B,但A、B不能是朋友(强烈吐槽,恋爱不都是从朋友到女(男)朋友吗,一见钟情除外。关键是题目里并没有相关的提示信息啊,哪位朋友如果能找到提示信息可以发在评论区里)
1142. Maximal Clique (25分)
题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/994805343979159552
AC代码
#include<bits/stdc++.h>
using namespace std;
int a[205][205];
int main()
{int nv,ne,m,k,t;cin>>nv>>ne;while(ne--){int t1,t2;cin>>t1>>t2;a[t1][t2]=a[t2][t1]=1;}cin>>m;while(m--){int flag1=1,flag2=1,vis[nv+1]={0};fill(vis,vis+nv,0);cin>>k;if(k==0){cout<<"Not a Clique"<<endl;continue;}vector<int> ans;for(int i=0;i<k;i++){cin>>t;vis[t]=1;ans.push_back(t);}for(int i=0;i<k-1;i++){for(int j=i+1;j<k;j++){if(a[ans[i]][ans[j]]==0){flag1=0;break;}if(flag1==0) break;}}if(flag1==0) cout<<"Not a Clique"<<endl;else{for(int i=1;i<=nv;i++){if(vis[i]==0){for(int j=0;j<k;j++){if(a[i][ans[j]]==0)break;if(j==k-1) flag2=0;}}if(flag2==0) {cout<<"Not Maximal"<<endl;break; }}if(flag2==1) cout<<"Yes"<<endl; }}
}
注意事项
- flag1,flag2两个变量的判断顺序——要在第一个判断是否连通后,再进入maximal的判断
- 我自己的代码在设置判断点是否在待测数组的vis时,将范围设置为了nv,即vis[nv]={0},但发现测试点2、3一直过不去,在将其改为vis[nv+1]={0}后,便可全部通过(测试了好久才找到,这是因为序号是从1到nv排序的)
1143 Lowest Common Ancestor (30 分)
题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/994805343727501312
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{int m,n;cin>>m>>n;vector<int> pre(n);unordered_map<int,int> vis;for(int i=0;i<n;i++){cin>>pre[i];vis[pre[i]]=1;}while(m--){int x,y,root;cin>>x>>y;if(vis[x]==0&&vis[y]==0) {printf("ERROR: %d and %d are not found.\n",x,y);continue;}else if(vis[x]==0||vis[y]==0){printf("ERROR: %d is not found.\n",vis[x]==0?x:y);continue;}for(int i=0;i<n;i++){root=pre[i];if((x<root&&y>root)||(x>root&&y<root)||x==root||y==root)break; } if((x<root&&y>root)||(x>root&&y<root))printf("LCA of %d and %d is %d.\n",x,y,root);else if(x==root)printf("%d is an ancestor of %d.\n",x,y);else if(y==root)printf("%d is an ancestor of %d.\n",y,x);}
}
注意事项
这道题的关键就是LCA的判断方法,我原先用的是递归(自己将前序序列排序得到中序数组,并按传统方法寻找),但在参考了柳神的文章后,我发现这道题完全可以用循环做。
因为这道题中的BST树满足左小右大的准则,那么通过数字大小的比较就可以知道节点的相应位置,进而做出判断
当然这是这道题独有的解题方法,因为在传统的二叉树中,数字大小与其在树中的位置是无关的,还是要用递归做。
PAT题目答案与经验总结1(持续更新,大家放心关注)相关推荐
- 机器学习面试经验--2017年持续更新
机器学习面试经验--2017年持续更新 搜狐面试算法实习生 岗位搜狐后台开发(机器学习NLP) 10:00--11:10 1.首先自我介绍,blabla简单介绍了一下本科研究生学校专业方向,面试官开始 ...
- 2020今日头条面试真题及答案整理最新最全持续更新中~~~~
大家好,我是好好学习天天编程的天天 一个整天在互联网上爬虫的程序员,每天给大家分享学习干货的攻城狮 2020今日头条面试真题及答案整理&最新最全&持续更新中~~~~ 2020今日头条面 ...
- 【PAT】PAT甲级题库所有题解(持续更新中...)
题解: 本文为导航页,一些希望刷PAT甲级的玩家可以来看看,我会持续更新所有题目的题解(取决于我做到哪儿了(doge)) 题号按照PAT官网给出的标注 题目: 链接 标签 1001 A+B Forma ...
- PAT 乙级(Basic Level) 题解汇总(持续更新)(C++)
前言 为了准备3月份的CCF CSP认证,以及提升自己的编程能力和数据结构与算法基础,目前我坚持每天刷pat乙级题库,然后记录在CSDN.一则,希望夯实我做过的题和学到的东西:二则,希望对和我一样的小 ...
- 有趣题目和认知合集(持续更新)
写写对一些算法的理解,挂几个有意思的题,可能也会挂几个板子题 算法理解偏向于能懂即可,没有严格的证明 快乐几何 [1.2]Volatile Kite 点到直线 快乐搜与暴力 [2.4]Short Co ...
- java spring面试题附pdf答案(最全版本持续更新)
前言 涵盖各大公司会问到的面试点,同时随着版本的升级,可能也会有一些面试题更新,也会同步保持更新,因为篇幅原因(其实是我懒,哈哈)所以列了一部分答案,所有的答案见下文,总共485页合计20个技术点,文 ...
- 头歌 软件测试项目综合实训 答案 有目录善用目录 持续更新
头歌 软件测试项目综合实训 其他作业链接 非盈利文章,谢谢大家的分享和支持,如果大家有想要投稿的答案,也可以点击下面链接联系作者. 点击联系作者 作者博客 选择题加粗为正确答案 头歌java实训答案集 ...
- Java面试题及答案整理(2022最新版) 持续更新
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~博主已将这些面试题整理到一个网站上,每天更新 Java 面试题,目前有 1万多道 Jav ...
- Kafka面试题及答案整理 110道 (持续更新)
最新Kafka面试题[附答案解析]Kafka面试题及答案,Kafka最新面试题及答案,Kafka面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的.这些答案难免会存在一些 ...
- 常见Jvm面试题总结及答案整理 120道(持续更新)
最新Jvm面试题总结及答案[附答案解析]Jvm面试题及答案2021,Jvm面试题最新面试题,Jvm面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的.这些答案难免会存在一 ...
最新文章
- 《数据科学:R语言实现》——2.7 爬取网络数据
- spark更改分区_spark RDD分区是否可以指定分区
- python函数入参和返回值
- sap权限激活_宅出职场含金量!SAP 解决方案培训课程线上免费学
- java filter 模式,Java设计模式----过滤器模式(挑三拣四)
- 一张图解释IaaS,PaaS,SaaS
- Windows 7 Sp1 x64 无法安装英文语言包(已解决)
- 【连载】穿越计算机的迷雾——读书笔记
- vue项目实现更换默认头像功能
- DataGridView 基本用法及注意事项
- Redis_17_Redis服务器中的数据库(五种基本类型底层存放)
- Spark 1:Spark基础入门
- Jeston Xavier NX 语言设置和中文键盘输入
- php 域名纠错,关闭网通域名纠错系统的解决方法(非常管用)
- vue element 重新上传图片(将已经上传过的图片链接重新上传)
- mysql查询18至28岁的人,MariaDB第三章(select)基本查询
- EXTJS 6 Grid 滚动到底部 触发事件(如:加载数据)
- python turtle绘图中角度坐标系的绝对零度方向是_ABAQUS 子程序VUMAT 的坐标系的问题的讨论...
- 【附源码】计算机毕业设计SSM小区停车计费管理系统
- 华为magicbook电脑看久了眼睛累的问题