2021秋季pat
写在前面
复习了好久的pat终于告一段落了,这些总结可以说凝聚了我那么久的复习了,事实证明付出还是会有收获的,这让我更加坚定冲浙了(也不一定,或者上交),加油,准备初试去了!
这次的考试比较简单,一小时二十分钟左右做完了,感觉有点拉不开差距。。。
第一题
#include<bits/stdc++.h>
using namespace std;
struct Node{
int first,l;
}node[10005];
int main(){
//假如i大于l0
int n,m;
cin>>n>>m;
for(int i=0;i<n;++i){
cin>>node[i].first>>node[i].l;
}
unordered_set<int>se;
int maxv=1;
for(int i=0;i<m;++i){
int num,sum=0;
cin>>num;
for(int j=0;j<n;++j){
sum+=node[j].l;
if(num >= sum){
if(j == n-1) cout<<"Illegal Access\n";
continue;
}
else{
cout<<node[j].first+(num - (sum-node[j].l)) *4<<endl;
se.insert(j);
if(j+1 > maxv) maxv=j+1;
break;
}
}
}
cout<<maxv;
system("pause");
}
第二题
```cpp
#include<bits/stdc++.h>
using namespace std;
struct Node{
int val,index;
};
bool cmp(Node a,Node b){
return a.val < b.val;
}
int main(){
int n;
cin>>n;
unordered_map<int,int>ma,ma1;
vector<int>hat(n),tmp_hat(n);
vector<Node>p(n+1);
for(int i=0;i<n;++i){
cin>>hat[i];
tmp_hat[i]=hat[i];
}
sort(tmp_hat.begin(),tmp_hat.end());
for(int i=0;i<n;++i) ma[tmp_hat[i]]=i+1;
for(int i=1;i<=n;++i){
int num;
cin>>num;
p[i]=Node{num,i};
}
sort(p.begin()+1,p.begin()+1+n,cmp);
for(int i=1;i<=n;++i){
ma1[i]=p[i].index;
}
int flag=0;
for(int i=n-1;i>=0;--i){
if(flag) cout<<' ';
flag=1;
cout<<ma1[ma[hat[i]]];
}
system("pause");
}
### 第三题
```cpp
#include<bits/stdc++.h>
using namespace std;
#define INF 0x7fffffff
int vis[500],arr[500][500];
int n,m;
void dfs(int root){
vis[root]=1;
for(int i=1;i<=n;++i){
if(!vis[i] && arr[root][i]>0){
dfs(i);
break;
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<m;++i){
int a,b;
cin>>a>>b;
arr[a][b]=1,arr[b][a]=1;
}
int index=0,maxv=-1;
for(int i=1;i<=n;++i){
fill(vis+1,vis+1+n,0);
int cnt=0;
dfs(i);
for(int i=1;i<=n;++i){
if(vis[i]) cnt++;
}
if(cnt > maxv){
index=i;
maxv=cnt;
}
}
printf("%d %d\n",index,maxv);
system("pause");
}
第四题
#include<bits/stdc++.h>
using namespace std;
#define INF 0x7fffffff
struct Node{
int key,pri;
}vec[50];
int n;
bool cmp(Node a,Node b){
return a.key < b.key;
}
map<int,Node> ma;
void fun(int inl,int inr,int l){
if(inl > inr) return ;
int index=inl,minv=vec[inl].pri;
for(int i=inl+1;i<=inr;++i){
if(vec[i].pri < minv){
index=i;
minv=vec[i].pri;
}
}
ma[l]=vec[index];
// cout<<vec[index].pri<<endl;
fun(inl,index-1,2*l);
fun(index+1,inr,2*l+1);
}
int main(){
cin>>n;
for(int i=0;i<n;++i){
int num,pri;
cin>>num>>pri;
vec[i].key=num,vec[i].pri=pri;
//cin>>vec[i].key>>vec[i].pri;
}
sort(vec,vec+n,cmp);
fun(0,n-1,1);
int flag=0;
for(auto it : ma){
if(flag) cout<<' ';
flag=1;
cout<<it.second.key;
}
cout<<endl;
flag=0;
for(auto it : ma){
if(flag) cout<<' ';
flag=1;
cout<<it.second.pri;
}
system("pause");
}