前两天考完就想写了,结果一直拖到现在orz……8月中旬的时候无意中看到PAT这个东东,因为刚好在准备保研,要复习机试的东西,就报了这个,虽然之前有接触过一点点ACM,不过个人对这种数据结构算法一直都不是特别擅长,准备了半个多月,每天都在刷题总结复习中度过,直到考完才感觉松了一口气,放一下分数和排名吧=w=(虽然感觉可以考的更好,不过也还算满意啦)
分数:91/100
排名:78/2237
这次PAT考试有几个特点:
说了这么多,放一下本次考试题解吧(对应PAT题库1148-1151),均是可以AC的
#include
#include
using namespace std;
int main(){
int N;
cin>>N;
int arr[N+1];
for(int i=1;i<=N;i++) cin>>arr[i];
bool flag=false;
int a,b;
// 列举每一种狼人组合
for(int i=1;i<=N;i++){
for(int j=i+1;j<=N;j++){
int lie_wolf=0,lie_human=0;
for(int k=1;k<=N;k++){// 判断该狼人组合下是否满足1个撒谎的狼人+1个撒谎的村民
if(k==i || k==j){// 狼人
if(arr[k]>0 && arr[k]==i || arr[k]==j) lie_wolf++;
else if(arr[k]<0 && abs(arr[k])!=i && abs(arr[k])!=j) lie_wolf++;
}else{// 村民
if(arr[k]>0 && arr[k]==i || arr[k]==j) lie_human++;
else if(arr[k]<0 && abs(arr[k])!=i && abs(arr[k])!=j) lie_human++;
}
}
if(lie_wolf==1 && lie_human==1){
a=i;
b=j;
flag=true;
break;
}
}
if(flag) break;
}
if(flag) cout<
2.第二题题意是给出一些危险物配对,比如A和B不能一起出现,B和C不能一起出现(但A和C可以一起出现,所以不是并查集问题),求所给序列中有没有危险物。思路也很简单,直接暴力遍历序列,找有没有危险匹配即可。
#include
#include
#include
using namespace std;
const int MAXV=100001;
vector m[MAXV];// 存储每个物品对应的危险物品列表
int main(){
int N,M;
cin>>N>>M;
for(int i=0;i>a>>b;
m[a].push_back(b);
m[b].push_back(a);
}
for(int i=0;i>K;
int arr[K];
bool flag=true;
for(int j=0;j>arr[j];
for(int j=0;j
3.**第三题是售货商问题。**不过这道题不需要去求解,只需要判断所给序列是不是满足条件即可,思路也很简单,先判断路径是否连通,不连通就输出“Not a TS cycle”,连通的话再判断序列是否包含了全部结点且首尾结点相同,是则为TS cycle或TS simple cycle,二者可以通过序列长度进行判断。
#include
#include
#include
using namespace std;
const int INF=0x3fffffff;
const int MAXV=201;
int G[MAXV][MAXV];
int main(){
int N,M,K;
cin>>N>>M;
fill(G[0],G[0]+MAXV*MAXV,-1);
for(int i=0;i>a>>b>>dis;
G[a][b]=G[b][a]=dis;
}
cin>>K;
int ans_index,ans_len=INF;
for(int i=1;i<=K;i++){
int n;
cin>>n;
int path[n],len=0;
bool flag=true;
set s;
for(int j=0;j>path[j];
s.insert(path[j]);
}
for(int j=0;j
4.最后一题是LCA问题。要求找二叉树中任两个结点的最小公共祖先结点。我的思路是先建树,然后对两个结点进行dfs,求出根节点到这两个结点的路径,对两条路径从头到尾比较,出现的第一个不同的结点则退出循环,该结点的前一个结点就是它们的LCA(比如:3结点的路径是1->5->3,4结点的路径是1->5->4,则它们的LCA为5),如果没有出现不同的结点说明二者是包含关系,根据两条路径长度可以判断谁是祖先。
#include
#include
#include
#include
放一下PAT甲级和乙级所有题目的代码(更新至2018.9.8),仅供参考=3=
PAT甲级:https://github.com/Lemon-XQ/PAT-Advanced
PAT乙级:https://github.com/Lemon-XQ/PAT-Basic