PAT-2019年秋季考试-甲级

7-1 Forever (20 分)

#include 
using namespace std;
int N,K,m,number[10];
multimap mp;
int sum_digit(int num) {
    int sum=0;
    while(num/10) {
        sum+=num%10;
        num/=10;
    }
    sum+=num;
    return sum;
}
int gcd(int a, int b) {
    if(a%b==0) {
        return b;
    } else return gcd(b,a%b);
}
bool isprime(int num) {
    if(num<=2) return false;
    int temp=sqrt(num);
    for(int i=2;i<=temp;++i) {
        if(!(num%temp)) return false;
    }
    return true;
}
void dfs(int index, int sum) {
    if(index==0) {
        if(sum==0) {
            int A=0;
            for(int i=K-1;i>=1;--i) {
                A=A*10+number[i];
            }
            A=(A*10+9);
            int n=sum_digit(A+1);
            int gcdnum=gcd(n,m);
            if(isprime(gcdnum)) {
                mp.insert(make_pair(n,A));
            }
        }
        return;
    }
    if(index==K-1) {
        for(int i=1;i<=9;++i) {
            if(sum-i>=0) {
                number[index]=i;
                dfs(index-1,sum-i);
            } else return;
        }
        return;
    }
    for(int i=0;i<=9;++i) {
        if(sum-i>=0) {
            number[index]=i;
            dfs(index-1,sum-i);
        } else return;
    }
    return;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    //freopen("in.txt","r",stdin);
    cin>>N;
    for(int i=1;i<=N;++i) {
        mp.clear();
        cin>>K>>m;
        dfs(K-1,m-9);
        cout<<"Case "<first<<" "<second<

PAT-2019年秋季考试-甲级_第1张图片
7-2 Merging Linked Lists (25 分)

#include 
using namespace std;
struct node {
    int add,data,next;
};
unordered_map mp;
vector a,b,c;
void merge(vector l1, vector l2) {
    int lena=l1.size(),lenb=l2.size(),index=0,indexa=0,indexb=0;
    while(indexa>addl1>>addl2>>n;

    int add,data,next;
    node temp;
    for(int i=0; i>add>>data>>next;
        temp.add=add;
        temp.data=data;
        temp.next=next;
        mp.insert(make_pair(add,temp));
    }
    add=addl1;
    while(add!=-1) {
        temp=mp.find(add)->second;
        a.push_back(temp);
        add=temp.next;
    }
    add=addl2;
    while(add!=-1) {
        temp=mp.find(add)->second;
        b.push_back(temp);
        add=temp.next;
    }
    int lena=a.size(),lenb=b.size();
    if(lena>lenb) merge(a,b);
    else merge(b,a);

    int lenc=c.size();
    for(int i=0; i

PAT-2019年秋季考试-甲级_第2张图片

7-3 Postfix Expression (25 分)

#include 
using namespace std;
struct node {
    string data;
    int pre,l,r;
};
node ans[25];
void dfs(int root) {
    cout<<"(";
    if(ans[root].l!=-1&&ans[root].r!=-1) {
        dfs(ans[root].l);
        dfs(ans[root].r);
        cout<>N;
    for(int i=1;i<=N;++i) {
        cin>>ans[i].data>>ans[i].l>>ans[i].r;
        ans[i].pre=i;
    }
    for(int i=1;i<=N;++i) {
        if(ans[i].l!=-1) ans[ans[i].l].pre=i;
        if(ans[i].r!=-1) ans[ans[i].r].pre=i;
    }
    int root;
    for(int i=1;i<=N;++i) {
        if(ans[i].pre==i) {
            root=i;
            break;
        }
    }
    dfs(root);
    return 0;
}

PAT-2019年秋季考试-甲级_第3张图片

7-4 Dijkstra Sequence (30 分)

#include 
using namespace std;
const int maxn = 1e3+5;
const int maxm = 1e5+5;
int g[maxn][maxn],ans[maxn],dis[maxn];
bool vis[maxn];
bool dij(int s, int n) {
    fill(dis,dis+maxn,INT_MAX); 
    dis[s]=0;
    fill(vis,vis+maxn,false);
    for(int i=1;i<=n;++i) {
        int v=-1,temp=INT_MAX;
        for(int u=1;u<=n;++u) {
            if(dis[u]>nv>>ne;
    int u,v,w;
    fill(g[0],g[0]+maxn*maxn,INT_MAX);
    for(int i=1;i<=ne;++i) {
        cin>>u>>v>>w;
        g[u][v]=g[v][u]=w;
    }
    cin>>k;
    while(k--) {
        for(int i=1;i<=nv;++i) {
            cin>>ans[i];    
        }
        if(dij(ans[1],nv)==true) {
            cout<<"Yes"<

PAT-2019年秋季考试-甲级_第4张图片

你可能感兴趣的:(PAT-2019年秋季考试-甲级)