其他分享
首页 > 其他分享> > pat a 1153

pat a 1153

作者:互联网

这道题我一开始做的非常复杂,我想在读入数据时就先把他们按照三种情况做一下预处理,所以导致了结构非常复杂,甚至用了map里面还套一个map映射,然后喜闻乐见超时了,将cout做了一下代换还得到了答案错误。
不过今天读了一下柳神说的话,我想自己如果写的太复杂,那确实不好进行检查,有些东西该简化还是需要简化的,多想想,多看看别人的代码。(好希望pat能开放测试点的数据,有时候我自己查实在查不到呀QAQ)看懂了柳神的思路后,写下来也很顺,确实比我自己写时像挤牙膏一样好多了,不过那些答案错误,我暂时先放在那里,以后再找吧。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <unordered_map>
using namespace std;

struct node{
	string id;
	int gra;
};

vector<node> ans;

bool cmp(node a,node b){
	if(a.gra!=b.gra){
		return a.gra>b.gra;
	}else{
		return a.id<b.id;
	}
}

int main(){
	int n,m;
	scanf("%d %d",&n,&m);
	vector<node> list(n);
	for(int i=0;i<n;i++){
		cin>>list[i].id>>list[i].gra;		
	}
	
	for(int i=1;i<=m;i++){
		ans.clear();
		int num;
		string s;
		cin>>num>>s;
		int cnt=0,sum=0;
		printf("Case %d: %d %s\n",i,num,s.c_str());
		if(num==1){
			for(int j=0;j<n;j++){
				if(list[j].id[0]==s[0]){
					ans.push_back(list[j]);
				}
			}
		}else if(num==2){
			for(int j=0;j<n;j++){
				if(list[j].id.substr(1,3)==s){
					cnt++;
					sum=sum+list[j].gra;
				}
			}
			if(cnt!=0){
				printf("%d %d\n",cnt,sum);
			}
		}else if(num==3){
			unordered_map<string,int> mp;
			for(int j=0;j<n;j++){
				if(list[j].id.substr(4,6)==s){
					mp[list[j].id.substr(1,3)]++;
				}
			}
			for(auto it=mp.begin();it!=mp.end();it++){
				ans.push_back(node{it->first,it->second});
			}
		}
		
		sort(ans.begin(),ans.end(),cmp);
		for(int j=0;j<ans.size();j++){
			printf("%s %d\n",ans[j].id.c_str(),ans[j].gra);
		}
		if(((num==1||num==3)&&ans.size()==0)||num==2&&cnt==0){
			printf("NA\n");
		}
	}
	
	
	return 0;
} 

原先的

#include <iostream>
#include <unordered_map>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;

struct node{
	string id;
	int gra;
};

struct type2{
	int cnt=0;
	int total=0;
};

struct type3{
	string sitename;
	int cnt=0;
};

vector<node> A,B,T;
vector<type3> out;
unordered_map<string,type2> mp1;
unordered_map<string,unordered_map<string,int>> mp2;

bool cmp1(node a,node b){
	if(a.gra!=b.gra){
		return a.gra>b.gra;
	}else{
		return a.id<b.id;
	}
}

bool cmp2(type3 a,type3 b){
	if(a.cnt!=b.cnt){
		return a.cnt>b.cnt;
	}else{
		return a.sitename<b.sitename;
	}
}

int main(){
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++){
		node temp;
		cin>>temp.id>>temp.gra;
		if(temp.id[0]=='A'){
			A.push_back(temp);
		}else if(temp.id[0]=='B'){
			B.push_back(temp);
		}else{
			T.push_back(temp);
		}
		string site=temp.id.substr(1,3);
		mp1[site].cnt++;
		mp1[site].total+=temp.gra;
		string date=temp.id.substr(4,6);
		mp2[date][site]++;
		
	}
	
	for(int i=1;i<=m;i++){
		int type;
		cin>>type;
		if(type==1){
			char c;
			getchar();
			scanf("%c",&c);
			printf("Case %d: %d %c\n",i,type,c);
			if(c=='A'){
				if(A.size()==0){
					printf("NA\n");
				}else{
					sort(A.begin(),A.end(),cmp1);
					for(int j=0;j<A.size();j++){
						printf("%s %d\n",A[j].id.c_str(),A[j].gra);
					}
				}
			}else if(c=='B'){
				if(B.size()==0){
					printf("NA\n");
				}else{
					sort(B.begin(),B.end(),cmp1);
					for(int j=0;j<B.size();j++){
						printf("%s %d\n",B[j].id.c_str(),B[j].gra);
					}
				}
			}else{
				if(T.size()==0){
					printf("NA\n");
				}else{
					sort(T.begin(),T.end(),cmp1);
					for(int j=0;j<T.size();j++){
						printf("%s %d\n",T[j].id.c_str(),T[j].gra);
					}
				}
			}
		}else if(type==2){
			string ci;
			cin>>ci;
			printf("Case %d: %d %s\n",i,type,ci.c_str());
			if(mp1[ci].cnt==0){
				printf("NA\n");
			}else{
				printf("%d %d\n",mp1[ci].cnt,mp1[ci].total);
			}
		}else{
			string da;
			cin>>da;
			printf("Case %d: %d %s\n",i,type,da.c_str());
			for(auto it=mp2[da].begin();it!=mp2[da].end();it++){
				type3 t;
				t.sitename=it->first;
				t.cnt=it->second;
				out.push_back(t);
			}
			if(out.size()==0){
				printf("NA\n");
			}else{
				sort(out.begin(),out.end(),cmp2);
				for(int j=0;j<out.size();j++){
					printf("%s %d\n",out[j].sitename.c_str(),out[j].cnt);
				}
			}
		}
	}
		
	return 0;
}
blxl313 发布了57 篇原创文章 · 获赞 0 · 访问量 887 私信 关注

标签:pat,temp,int,1153,else,gra,include,id
来源: https://blog.csdn.net/blxl313/article/details/104185915