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

  • 相关阅读:
    设计模式(简述)
    sql注入防御
    两个防SQL注入过滤代码
    SQL注入实战利用“dbo”获得SQL管理权限和系统权限
    SQL注入技术和跨站脚本攻击的检测
    蓝雨设计整站SQL注入漏洞
    SQL注入攻击零距离
    菜鸟入门级:SQL注入攻击
    三步堵死SQL注入漏洞
    终极防范SQL注入漏洞
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/11509736.html
Copyright © 2011-2022 走看看