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]);
}

注意事项

  1. root->left=insert(t,root->left);这行代码的函数命insert我一开始竟然没写,确实是好久没建树了,考试前要注意练习
  2. dfs中当节点为NULL时,必须要写return,否则无法退出
  3. 这道题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);}
}

注意事项

  1. 之所以在输入阶段大费周章采用字符串判断正负,就是为了对0000做判断,因为如果整数判断,0本身的正负无法确定(即-0000无法判断)
  2. 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; }}
}

注意事项

  1. flag1,flag2两个变量的判断顺序——要在第一个判断是否连通后,再进入maximal的判断
  2. 我自己的代码在设置判断点是否在待测数组的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(持续更新,大家放心关注)相关推荐

  1. 机器学习面试经验--2017年持续更新

    机器学习面试经验--2017年持续更新 搜狐面试算法实习生 岗位搜狐后台开发(机器学习NLP) 10:00--11:10 1.首先自我介绍,blabla简单介绍了一下本科研究生学校专业方向,面试官开始 ...

  2. 2020今日头条面试真题及答案整理最新最全持续更新中~~~~

    大家好,我是好好学习天天编程的天天 一个整天在互联网上爬虫的程序员,每天给大家分享学习干货的攻城狮 2020今日头条面试真题及答案整理&最新最全&持续更新中~~~~ 2020今日头条面 ...

  3. 【PAT】PAT甲级题库所有题解(持续更新中...)

    题解: 本文为导航页,一些希望刷PAT甲级的玩家可以来看看,我会持续更新所有题目的题解(取决于我做到哪儿了(doge)) 题号按照PAT官网给出的标注 题目: 链接 标签 1001 A+B Forma ...

  4. PAT 乙级(Basic Level) 题解汇总(持续更新)(C++)

    前言 为了准备3月份的CCF CSP认证,以及提升自己的编程能力和数据结构与算法基础,目前我坚持每天刷pat乙级题库,然后记录在CSDN.一则,希望夯实我做过的题和学到的东西:二则,希望对和我一样的小 ...

  5. 有趣题目和认知合集(持续更新)

    写写对一些算法的理解,挂几个有意思的题,可能也会挂几个板子题 算法理解偏向于能懂即可,没有严格的证明 快乐几何 [1.2]Volatile Kite 点到直线 快乐搜与暴力 [2.4]Short Co ...

  6. java spring面试题附pdf答案(最全版本持续更新)

    前言 涵盖各大公司会问到的面试点,同时随着版本的升级,可能也会有一些面试题更新,也会同步保持更新,因为篇幅原因(其实是我懒,哈哈)所以列了一部分答案,所有的答案见下文,总共485页合计20个技术点,文 ...

  7. 头歌 软件测试项目综合实训 答案 有目录善用目录 持续更新

    头歌 软件测试项目综合实训 其他作业链接 非盈利文章,谢谢大家的分享和支持,如果大家有想要投稿的答案,也可以点击下面链接联系作者. 点击联系作者 作者博客 选择题加粗为正确答案 头歌java实训答案集 ...

  8. Java面试题及答案整理(2022最新版) 持续更新

    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~博主已将这些面试题整理到一个网站上,每天更新 Java 面试题,目前有 1万多道 Jav ...

  9. Kafka面试题及答案整理 110道 (持续更新)

    最新Kafka面试题[附答案解析]Kafka面试题及答案,Kafka最新面试题及答案,Kafka面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的.这些答案难免会存在一些 ...

  10. 常见Jvm面试题总结及答案整理 120道(持续更新)

    最新Jvm面试题总结及答案[附答案解析]Jvm面试题及答案2021,Jvm面试题最新面试题,Jvm面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的.这些答案难免会存在一 ...

最新文章

  1. 《数据科学:R语言实现》——2.7 爬取网络数据
  2. spark更改分区_spark RDD分区是否可以指定分区
  3. python函数入参和返回值
  4. sap权限激活_宅出职场含金量!SAP 解决方案培训课程线上免费学
  5. java filter 模式,Java设计模式----过滤器模式(挑三拣四)
  6. 一张图解释IaaS,PaaS,SaaS
  7. Windows 7 Sp1 x64 无法安装英文语言包(已解决)
  8. 【连载】穿越计算机的迷雾——读书笔记
  9. vue项目实现更换默认头像功能
  10. DataGridView 基本用法及注意事项
  11. Redis_17_Redis服务器中的数据库(五种基本类型底层存放)
  12. Spark 1:Spark基础入门
  13. Jeston Xavier NX 语言设置和中文键盘输入
  14. php 域名纠错,关闭网通域名纠错系统的解决方法(非常管用)
  15. vue element 重新上传图片(将已经上传过的图片链接重新上传)
  16. mysql查询18至28岁的人,MariaDB第三章(select)基本查询
  17. EXTJS 6 Grid 滚动到底部 触发事件(如:加载数据)
  18. python turtle绘图中角度坐标系的绝对零度方向是_ABAQUS 子程序VUMAT 的坐标系的问题的讨论...
  19. 【附源码】计算机毕业设计SSM小区停车计费管理系统
  20. 华为magicbook电脑看久了眼睛累的问题

热门文章

  1. STM32中 利用PWM控制步进电机,ARR与PSC值的设定
  2. JavaScript(基础知识)
  3. android 沉浸式按钮,android – 如何完全退出沉浸式全屏模式?
  4. Redis高级特性RDB、AOF、事务、Stream、Pipeline和Lua脚本
  5. 怎样快速将方形图片剪裁成椭圆形?分享大家一个小妙招
  6. 在计算机中NIC是什么意思?
  7. web前端开发工程师的真实能力如何判定?大厂资深前端指点迷津
  8. 网页前端简单计算器制作
  9. Linux固态硬盘 设置写入缓存,写入缓存策略怎么打开让SSD提高速度
  10. Playbook特殊用法