PAT-2019年秋季考试-甲级

7-1 Forever (20 分)

#include <bits/stdc++.h>
using namespace std;
int N,K,m,number[10];
multimap<int,int> 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 "<<i<<endl;
        if(mp.size()==0) {
            cout<<"No Solution"<<endl;
        } else {
            for(auto it=mp.begin();it!=mp.end();it++) {
                cout<<it->first<<" "<<it->second<<endl;
            }
        }
    }
    return 0;
}

1143334-20190912011630176-1173015656.png
7-2 Merging Linked Lists (25 分)

#include <bits/stdc++.h>
using namespace std;
struct node {
    int add,data,next;
};
unordered_map<int,node> mp;
vector<node> a,b,c;
void merge(vector<node> l1, vector<node> l2) {
    int lena=l1.size(),lenb=l2.size(),index=0,indexa=0,indexb=0;
    while(indexa<lena||indexb<lenb) {
        if(indexa<lena) {
            c.push_back(l1[indexa]);
            indexa++;
        }
        if(indexa<lena) {
            c.push_back(l1[indexa]);
            indexa++;
        }
        if(indexb<lenb) {
            c.push_back(l2[lenb-1-indexb]);
            indexb++;
        }
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int addl1,addl2,n;
    cin>>addl1>>addl2>>n;

    int add,data,next;
    node temp;
    for(int i=0; i<n; ++i) {
        cin>>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<lenc-1; ++i) printf("%05d %d %05d\n",c[i].add,c[i].data,c[i+1].add);
    printf("%05d %d -1\n",c[lenc-1].add,c[lenc-1].data);
    return 0;
}

1143334-20190912011649305-68328210.png

7-3 Postfix Expression (25 分)

#include <bits/stdc++.h>
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<<ans[root].data;
    } else if(ans[root].l==-1&&ans[root].r==-1) {
        cout<<ans[root].data;
    } else if(ans[root].l==-1&&ans[root].r!=-1) {
        cout<<ans[root].data;
        dfs(ans[root].r);
    }
    cout<<")";
    return;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    //freopen("in.txt","r",stdin);
    int N;
    cin>>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;
}

1143334-20190912011705393-634048869.png

7-4 Dijkstra Sequence (30 分)

#include <bits/stdc++.h>
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]<temp&&vis[u]==false) {
                temp=dis[u];
                v=u;
            }   
        }
        if(v==-1) return false;
        if(dis[ans[i]]!=dis[v]||vis[ans[i]]==true) return false;
        v=ans[i];
        vis[v]=true;
        for(int u=1;u<=n;++u) {
            if((g[v][u]!=INT_MAX)&&(vis[u]==false)&&(dis[v]+g[v][u]<dis[u])) {
                dis[u]=dis[v]+g[v][u];
            }
        }
    }
    return true;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    //freopen("in.txt","r",stdin);
    
    int nv,ne,k;
    cin>>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"<<endl;
        } else {
            cout<<"No"<<endl;
        }
    }
    return 0;
}

1143334-20190912011718920-1337249772.png

转载于:https://www.cnblogs.com/lemonbiscuit/p/11509736.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值