zoukankan      html  css  js  c++  java
  • PAT(甲级)2019年春季考试

    7-1 Sexy Primes 判断素数 一个点没过17/20分

    错因:输出i-6写成了输出i,当时写的很乱,可以参考其他人的写法

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1e8;
    typedef long long ll;
    int n;
    
    bool isprime(ll x){
    	if(x == 0 || x==1 || x==2) return false;
    	for(ll i=2;i<=sqrt(x);i++){
    		if(x%i==0) return false;
    	}
    	return true;
    }
    
    int main(){
    	scanf("%lld",&n);
    	if(isprime(n)){
    		if(n>=6 && isprime(n-6)){
    			puts("Yes");
    			printf("%lld",n-6);
    		}else if(isprime(n+6)){
    			puts("Yes");
    			printf("%lld",n+6);
    		}else{
    			puts("No");
    			for(ll i=n+1;i<=maxn;i++){
    				if(i-6>=0){
    					if((i-6)>=0 && isprime(i) && isprime(i-6)){
    						printf("%lld",i);
    						break;
    					}
    				}else{
    					if(isprime(i) && isprime(i+6)){
    						printf("%lld",i);
    						break;
    					}
    				}
    			}
    		}
    	}else{
    		puts("No");
    		for(ll i=n+1;i<=maxn;i++){
    			if(i-6>=0){
    				if((i-6)>=0 && isprime(i) && isprime(i-6)){
    					printf("%lld",i);
    					break;
    				}
    			}else{
    				if(isprime(i) && isprime(i+6)){
    					printf("%lld",i);
    					break;
    				}
    			}
    		}
    	}
    	return 0;
    } 
    
    

    修改后的代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1e8+10;
    typedef long long ll;
    int n;
    
    bool isprime(ll x){
    	if(x == 0 || x==1 || x==2) return false;
    	for(ll i=2;i<=sqrt(x);i++){
    		if(x%i==0) return false;
    	}
    	return true;
    }
    
    int main(){
    		scanf("%lld",&n);
    		printf("i = %d
    ",ac);
    		if(isprime(n)){
    			if(n>=6 && isprime(n-6)){
    				puts("Yes");
    				printf("%lld",n-6);
    			}else if(isprime(n+6)){
    				puts("Yes");
    				printf("%lld",n+6);
    			}else{
    				puts("No");
    				for(ll i=n+1;i<=maxn;i++){
    					if(i-6>=0){
    						if((i-6)>=0 && isprime(i) && isprime(i-6)){
    							printf("%lld",i);
    							break;
    						}
    					}else{
    						if(isprime(i) && isprime(i+6)){
    							printf("%lld",i);
    							break;
    						}
    					}
    				}
    			}
    		}else{
    			puts("No");
    			for(ll i=n+1;i<=maxn;i++){
    				if(i-6>=0){
    					if((i-6)>=0 && isprime(i) && isprime(i-6)){
    						printf("%lld",i - 6);
    						break;
    					}else if(isprime(i) && isprime(i+6)){
    						printf("%lld",i);
    						break;
    					}
    				}else{
    					if(isprime(i) && isprime(i+6)){
    						printf("%lld",i);
    						break;
    					}
    				}
    			}
    		}
    	return 0;
    } 
    

    7-2 Anniversary 集合、查找排序 25分

    #include<bits/stdc++.h>
    using namespace std;
    
    set<string> se1;
    set<string> se2;
    int n,m;
    
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		string id;
    		cin>>id;
    		se1.insert(id);
    	}
    	int ans = 0;
    	string guestold = "99999999";
    	string assold = "99999999";
    	string guest;
    	string ass;
    	cin>>m;
    	for(int i=1;i<=m;i++){
    		string id;
    		cin>>id;
    		se2.insert(id);
    		string temp;
    		for(int j=6;j<=13;j++) temp.push_back(id[j]);
    		if(se1.find(id) != se1.end()){
    			ans++;
    			if(assold > temp) {
    				assold = temp;
    				ass = id;
    			}
    		}
    		if(guestold > temp) {
    			guestold = temp;
    			guest = id;
    		}
    	}
    	cout<<ans<<endl;
    	if(ans != 0){
    		if(n !=0){
    			cout<<ass<<endl;
    		}
    	}else{
    		if(m!=0){
    			cout<<guest<<endl;
    		}
    	}
    	return 0;
    }
    

    7-3 Telefraud Detection 图论 15/25分

    更新错误原因:没有完全搞清题意,total duration,表示两人之间累计的通话时间
    下面的代码只算了最后1次时间(覆盖)
    修改后,可以用并查集做,不过感觉没必要,统计入度出度+暴力判断集合也不会超时的
    参考链接



    #include<bits/stdc++.h>
    using namespace std;
    
    /*
    邻接矩阵
    点:出度 和他的边相关的入度
    */
    
    const int maxn = 1010;
    int k,n,m;
    int g[maxn][maxn];
    vector<int> sss;
    int vis[maxn];
    vector<int> temp;
    set<int> se;
    
    
    void print(){
    	if(temp.size()==0) return;
    	cout<<temp[0];
    	for(int i=1;i<temp.size();i++){
    		cout<<" "<<temp[i];
    	}
    	cout<<endl;
    }
    
    int main(){
    	cin>>k>>n>>m;
    	for(int i=1;i<=m;i++){
    		int u,v,w;
    		cin>>u>>v>>w;
    		g[u][v] = w;
    	}
    	for(int i=1;i<=n;i++){
    		int call = 0;
    		int back = 0;
    		for(int j=1;j<=n;j++){
    			if(g[i][j]!=0 && g[i][j] <= 5){
    				call++;
    				if(g[j][i] != 0) back++;
    			}
    		}
    		if(call > k && back*5 <= call){
    			sss.push_back(i);
    			se.insert(i);
    		}
    	}
    	if(sss.size() == 0){
    		cout<<"None"<<endl;
    		return 0;
    	}
    	sort(sss.begin(),sss.end());
    	for(int i=0;i<sss.size();i++){
    		int x = sss[i];
    		temp.clear();
    		if(!vis[x]){
    			vis[x] = 1;
    			temp.push_back(x);
    			for(int j=i+1;j<sss.size();j++){
    				//判断第sss[i]能否可以用 
    				bool can = true;
    				for(int k=0;k<temp.size();k++){
    					if(g[sss[j]][temp[k]] == 0){
    						can = false;
    						break;
    					}
    				}
    				if(can == true){
    					vis[sss[j]] = 1;
    					temp.push_back(sss[j]);
    				}
    			}
    			print();
    		}
    	}
    	return 0;
    }
    

    7-4 Structure of a Binary Tree 二叉树中序后序建树,dfs深搜30分

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m;
    const int maxn = 1100;
    int in[maxn];
    int post[maxn];
    
    struct node{
    	int v;
    	node* l;
    	node* r;
    };
    int level[maxn];
    int l[maxn];
    int r[maxn];
    int sib[maxn];
    int par[maxn];
    bool full = true;
    
    void dfs(node *root,int depth){
    	if(root == NULL) return;
    	int x = root->v;
    	level[x] = depth;
    	if(root->l != NULL){
    		par[root->l->v] = x;
    		l[x] = root->l->v;
    		dfs(root->l,depth+1);
    	}
    	if(root->r != NULL){
    		par[root->r->v] = x;
    		r[x] = root->r->v;
    		dfs(root->r,depth+1);
    	}
    	if(root->l != NULL && root->r != NULL){
    		sib[root->l->v] = root->r->v;
    		sib[root->r->v] = root->l->v;
    	}
    	if((root->l == NULL && root->r !=NULL) || (root->r == NULL && root->l !=NULL) ){
    		full = false;
    	}
    }
    
    node* build(int il,int ir,int pl,int pr){
    	if(il > ir) return NULL;
    	int rootv = post[pr];
    	int pos = il;
    	while(pos <= ir && in[pos] != rootv) pos++;
    	node *root = new node;
    	root->v = rootv;
    	root->l = build(il,pos-1,pl,pr-(ir-pos)-1);
    //	pr-(ir-pos)+1
    //	root->r = build(pos+1,ir,pl+(pos-il)+1,pr);
    	root->r = build(pos+1,ir,pr-(ir-pos)+1,pr-1);
    	return root;
    }
    
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++) cin>>post[i];
    	for(int j=1;j<=n;j++) cin>>in[j];
    	node* Root = build(1,n,1,n);
    	dfs(Root,1);
    	cin>>m;
    	getchar();
    	while(m--){
    		string stat;
    	    getline(cin, stat);
    		if(stat.find("root") != string::npos){
    			int root = 0;
    			for(int i=0;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') break;
    				root = root*10 + (stat[i] - '0');
    			}
    			if(root == Root->v){
    				puts("Yes");
    			}else{
    				puts("No");
    			}
    		}else if(stat.find("siblings") != string::npos){
    			int parent = 0;
    			int pos = 0;
    			for(int i=0;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') break;
    				parent = parent*10 + (stat[i] - '0');
    				pos = i;
    			}
    			int child = 0;
    			for(int i = pos+1;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') continue;
    				child = child*10 + (stat[i] - '0');
    			}
    			if(sib[parent] == child && sib[child] == parent){
    				puts("Yes");
    			}else{
    				puts("No");
    			}
    		}else if(stat.find("parent") != string::npos){
    			int parent = 0;
    			int pos = 0;
    			for(int i=0;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') break;
    				parent = parent*10 + (stat[i] - '0');
    				pos = i;
    			}
    			int child = 0;
    			for(int i = pos+1;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') continue;
    				child = child*10 + (stat[i] - '0');
    			}
    			if(par[child] == parent){
    				puts("Yes");
    			}else{
    				puts("No");
    			}
    		}else if(stat.find("left") != string::npos){
    			int parent = 0;
    			int pos = 0;
    			for(int i=0;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') break;
    				parent = parent*10 + (stat[i] - '0');
    				pos = i;
    			}
    			int child = 0;
    			for(int i = pos+1;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') continue;
    				child = child*10 + (stat[i] - '0');
    			}
    			if(l[child] == parent){
    				puts("Yes");
    			}else{
    				puts("No");
    			}
    		}else if(stat.find("right") != string::npos){
    			int parent = 0;
    			int pos = 0;
    			for(int i=0;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') break;
    				parent = parent*10 + (stat[i] - '0');
    				pos = i;
    			}
    			int child = 0;
    			for(int i = pos+1;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') continue;
    				child = child*10 + (stat[i] - '0');
    			}
    			if(r[child] == parent){
    				puts("Yes");
    			}else{
    				puts("No");
    			}
    		}else if(stat.find("same") != string::npos){
    			int parent = 0;
    			int pos = 0;
    			for(int i=0;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') break;
    				parent = parent*10 + (stat[i] - '0');
    				pos = i;
    			}
    			int child = 0;
    			for(int i = pos+1;i<stat.length();i++){
    				if(stat[i] > '9' ||  stat[i] < '0') continue;
    				child = child*10 + (stat[i] - '0');
    			}
    			if(level[parent] == level[child]){
    				puts("Yes");
    			}else{
    				puts("No");
    			}
    		}else if(stat.find("full") != string::npos){
    			if(full) puts("Yes");
    			else puts("No");
    		}
    		
    	}
    	return 0;
    }
    
  • 相关阅读:
    iOS拓展---[转载]视频相关,一定要看呀
    iOS拓展---碰到奇葩需求
    iOS拓展---【转载】成熟的夜间模式解决方案
    2018年度总结
    linux常用命令
    自我认识
    SpringBoot入门最详细教程
    SVN分支的合并和同步
    java Data、String、Long三种日期类型之间的相互转换
    徐胜治:我要留下真正的东西
  • 原文地址:https://www.cnblogs.com/fisherss/p/11579935.html
Copyright © 2011-2022 走看看