#include"bits/stdc++.h"usingnamespace std;structnode{longlongint addr;longlongint len;};
vector<node> v;
map<longlongint,int> mp;intmain(){int n, m;
cin >> n >> m;
v.resize(n+1);longlongint sum =0;for(size_t i =1; i <= n; i++){int ad, len;
cin >> ad >> len;if(len ==0)continue;
sum += len;
v[i]={ ad,len };
mp[sum]= i;}
set<int> s;for(size_t i =0; i < m; i++){longlongint elem;
cin >> elem;longlongint idx =0,curSum =0;bool flag =false;for(auto it : mp){if(elem < it.first){
idx = it.second;
flag =true;
s.insert(idx);//cout << idx << endl;break;}
curSum = it.first;}//找indexif(flag){longlongint adr = v[idx].addr;longlongint len = v[idx].len;printf("%lld\n", adr +((elem - curSum)%len)*4);}else cout <<"Illegal Access"<< endl;}
cout << s.size()<< endl;return0;}
7-2 (AC代码)
#include"bits/stdc++.h"usingnamespace std;
vector<int> ohat, oweight;
vector<int> shat, sweight;boolcmp(int a,int b){return a > b;}intfind(int x,vector<int> v,int flag){int res =0;for(int i =0; i < v.size(); i++){if(x == v[i]){
res = i;}}if(flag%2==0){return res +1;//找第几大,v是按大到小排好序}else{return v.size()- res;//找第几小}}intfind2(int idx, vector<int> v,int flag){if(flag %2==1) idx = v.size()+1- idx;for(size_t i =0; i < v.size(); i++){if(i +1== idx){for(size_t j =0; j < v.size(); j++){if(v[i]== oweight[j])return j +1;}}}}intmain(){int n;
cin >> n;
ohat.resize(n);
oweight.resize(n);for(size_t i =0; i < n; i++) cin >> ohat[i];for(size_t i =0; i < n; i++) cin >> oweight[i];
shat = ohat;
sweight = oweight;sort(shat.begin(), shat.end(), cmp);sort(sweight.begin(), sweight.end(), cmp);int flag =0;
vector<int> idx;for(int i = n -1; i >=0; i--){
idx.push_back(find(ohat[i], shat, flag++));}
flag =0;for(size_t i =0; i < n; i++){int t = idx[i];if(i !=0) cout <<" ";
cout <<find2(t, sweight, flag++);}return0;}
7-3 (AC代码)
#include"bits/stdc++.h"usingnamespace std;structnode{int val;int pri;int index;};int n;
vector<int> in;
vector<node>v;
vector<node> ans;boolcmp(node a, node b){if(a.index != b.index)return a.index < b.index;}boolcmp1(node a, node b){if(a.val != b.val)return a.val < b.val;}voidlevelOrder(int inL,int inR,int index){//find rootif(inL > inR)return;int i = inL;int minPri =100000;int minIdx =-1;for(size_t i = inL; i < inR; i++){if(v[i].pri < minPri){
minPri = v[i].pri;
minIdx = i;}}if(minIdx ==-1)return;
v[minIdx].index = index;
ans.push_back(v[minIdx]);levelOrder(inL, minIdx,2* index);levelOrder(minIdx +1, inR,2* index +1);}intmain(){
cin >> n;for(size_t i =0; i < n; i++){int val, pri;
cin >> val >> pri;
v.push_back({ val,pri });}sort(v.begin(), v.end(), cmp1);for(size_t i =0; i < n; i++){
in.push_back(v[i].pri);}levelOrder(0, n,1);sort(ans.begin(), ans.end(), cmp);for(size_t i =0; i < ans.size(); i++){if(i !=0) cout <<" ";
cout << ans[i].val;}
cout << endl;for(size_t i =0; i < ans.size(); i++){if(i !=0) cout <<" ";
cout << ans[i].pri;}return0;}
7-4 (AC代码)
#include"bits/stdc++.h"usingnamespace std;constint MAXV =105;int n, m;
vector<int> adj[MAXV];int maxDp;bool vis[MAXV]={false};boolcmp(int a,int b){return a < b;}voiddfs(int u,int depth){bool flag =false;for(size_t i =0; i < adj[u].size(); i++){int v = adj[u][i];if(!vis[v]){
flag =true;break;}}//printf("cur vis:%d D:%d\n", u, depth);if(!flag){if(depth > maxDp){
maxDp = depth;return;}}
vis[u]=true;for(size_t i =0; i < adj[u].size(); i++){int v = adj[u][i];if(!vis[v]){dfs(v, depth +1);break;}}}intmain(){
cin >> n >> m;for(size_t i =0; i < m; i++){int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);}for(int i =1; i <= n; i++){sort(adj[i].begin(), adj[i].end(), cmp);}int rMaxDp =-1;
vector<int> ans;for(size_t i =1; i <=n ; i++){
maxDp =-1;fill(vis, vis + MAXV,false);//cout << i << endl;dfs(i,1);if(maxDp > rMaxDp){
rMaxDp = maxDp;
ans.clear();
ans.push_back(i);}elseif(maxDp == rMaxDp){
ans.push_back(i);}}
cout << ans[0]<<" "<< rMaxDp << endl;return0;}
PAT 2021秋季题解7-1(11分代码)#include "bits/stdc++.h"using namespace std;struct node{ long long int addr; long long int len;};vector<node> v;map<long long int, int> mp;int main(){ int n, m; cin >> n >> m; v.resize(n+1); lon