码迷,mamicode.com
首页 > 其他好文 > 详细

PAT(甲级)2017年春季考试

时间:2019-12-06 13:53:09      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:else   vector   set   欧拉   keep   str   i++   main   chain   

PAT(甲级)2017年春季考试

C题图论欧拉回路,还没写,因为太饿了,待补

A.Raffle for Weibo Followers

#include<bits/stdc++.h>
using namespace std;

int m,n,s;
vector<string> person;
set<string> se;
vector<string> ans;

int main(){
    cin>>m>>n>>s;
    for(int i=1;i<=m;i++){
        string name;
        cin>>name;
        person.push_back(name);
    }
    int num = person.size();
//  for(int i=0;i<num;i++) cout<<person[i]<<endl; 
    if(s > num) puts("Keep going...");
    else{
        int pos = s-1;
        while(pos < num){
            if(se.find(person[pos]) == se.end()){
                se.insert(person[pos]);
//              cout<<pos<<endl;
                ans.push_back(person[pos]);
                pos = pos + n;
            }else{
                pos++;
            }
        }
        for(int i=0;i<ans.size();i++) cout<<ans[i]<<endl;
    }
    
    return 0;
} 

B.Chain the Ropes优先队列

#include<bits/stdc++.h>
using namespace std;

priority_queue<int,vector<int>,greater<int> > que;

int n;

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int d;
        cin>>d;
        que.push(d);
    }
    while(que.size() != 1){
        int fir = que.top();
        que.pop();
        int sec = que.top();
        que.pop();
        int thir = (fir + sec)/2;
        que.push(thir);
    }
    cout<<que.top();
    return 0;
}

C.Eulerian Path

还没做,图论,欧拉回路

D.ZigZagging on a Tree

二叉树,中序后序建树,输出Z字型层次遍历的结果

#include<bits/stdc++.h>
using namespace std;

const int maxn = 50;
int n;
int post[maxn];
int in[maxn];
vector<int> ans[maxn];

struct node{
    int v;
    node *l;
    node *r;
};

int maxDepth = 0;

void dfs(node *root,int depth){
    if(depth > maxDepth) maxDepth = depth;
    ans[depth].push_back(root->v);
    if(root->l) dfs(root->l,depth+1);
    if(root->r) dfs(root->r,depth+1);
}

node * build(int root,int il,int ir) {
    if (il > ir) return NULL;
    int pos = il;
    while (pos <= ir && in[pos] != post[root]) 
        pos++;
    node* Root = new node;
    Root->v = post[root];
    Root->r = build(root-1, pos+1,ir );
    Root->l = build(root-(ir-pos)-1 ,il,pos - 1);
    return Root;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>in[i];
    for(int i=1;i<=n;i++) cin>>post[i];
    node *Root = new node();
    Root = build(n,1,n);
    dfs(Root,1);
    cout<<ans[1][0];
    for(int i=2;i<=maxDepth;i++){
        if(i%2==0){
            for(int j=0;j<ans[i].size();j++){
                cout<<" "<<ans[i][j];
            }
        }else{
            for(int j=ans[i].size()-1;j>=0;j--){
                cout<<" "<<ans[i][j];
            }
        }
    }
    return 0;
}

PAT(甲级)2017年春季考试

标签:else   vector   set   欧拉   keep   str   i++   main   chain   

原文地址:https://www.cnblogs.com/fisherss/p/11994468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!