zoukankan      html  css  js  c++  java
  • 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;
    }
    


    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
    ",c[i].add,c[i].data,c[i+1].add);
    	printf("%05d %d -1
    ",c[lenc-1].add,c[lenc-1].data);
    	return 0;
    }
    

    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;
    }
    

    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;
    }
    

  • 相关阅读:
    IntelliJ IDEA 14.03 java 中文文本处理中的编码格式设置
    应聘感悟
    STL string分析
    CUDA SDK VolumeRender 分析 (1)
    BSP
    CUDA SDK VolumeRender 分析 (3)
    CUDA SDK VolumeRender 分析 (2)
    Windows软件发布时遇到的一些问题
    Ten Commandments of Egoless Programming (转载)
    复习下光照知识
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/11509736.html
Copyright © 2011-2022 走看看