1095 解码PAT准考证

注意点

一开始解这道题只过了两个点,但翻了各种题解,感觉思路没有任何问题。最后终于找到一篇博客提供测试点的数据,发现还是漏了在循环后对数组的初始化。

代码

#include <iostream>
#include <cstdio>
#include <string>
#include <utility> 
#include <vector>
#include <algorithm>
using namespace std;

bool cmp_diy(pair<string,int> a,pair<string,int> b){
	if(a.second!=b.second){
		return a.second>b.second;
	}
	else{
		return a.first<b.first;
	}
}
bool cmp_diy2(pair<int,int> a,pair<int,int> b){
	if(a.second!=b.second){
		return a.second>b.second;
	}
	else{
		return a.first<b.first;
	}
}
int a[1000];
int main()
{
	for(int i=0;i<1000;i++){
		a[i]=0;
	}
	int n,m;
	int type;
	string order;
	string index;
	int point;
	pair<string,int> pa;
	vector<pair<string,int> > vt;
	vector<pair<string,int> > vt2;
	vector<pair<string,int> > vt4;
	vector<pair<string,int> > vt5;
	vector<pair<int,int> > vt3;
	pair<int,int> pa2;
	int tmp1;
	int tmp2;
	int f;
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++){
		cin>>index;
		scanf("%d",&point);
		pa.first=index;
		pa.second=point;
		vt.push_back(pa);
	}
	for(int i=0;i<vt.size();i++){
		if(vt[i].first[0]=='T'){
			vt2.push_back(vt[i]);
		}
		else if(vt[i].first[0]=='A'){
			vt4.push_back(vt[i]);
		}
		else if(vt[i].first[0]=='B'){
			vt5.push_back(vt[i]);
		}
	}
	sort(vt2.begin(),vt2.end(),cmp_diy);
	sort(vt4.begin(),vt4.end(),cmp_diy);
	sort(vt5.begin(),vt5.end(),cmp_diy);
	for(int j=0;j<m;j++){
		scanf("%d",&type);
		cin>>order;
		printf("Case ");
		printf("%d",(j+1));
		printf(": ");
		printf("%d",type);
		printf(" ");
		printf("%s",order.c_str());
		printf("\n");
		if(type==1){
			if(order[0]=='T'){
				if(vt2.size()==0){
					printf("NA\n");
					continue;
				}
				else{
			
				}
				for(int i=0;i<vt2.size();i++){
					printf("%s",vt2[i].first.c_str());
					printf(" ");
					printf("%d",vt2[i].second);
					printf("\n");
				}	
			}
			else if(order[0]=='A'){
				if(vt4.size()==0){
					printf("NA\n");
					continue;
				}
				else{
			
				}
				for(int i=0;i<vt4.size();i++){
					printf("%s",vt4[i].first.c_str());
					printf(" ");
					printf("%d",vt4[i].second);
					printf("\n");
				}	
			}
			else if(order[0]=='B'){
				if(vt5.size()==0){
					printf("NA\n");
					continue;
				}
				else{
			
				}
				for(int i=0;i<vt5.size();i++){
					printf("%s",vt5[i].first.c_str());
					printf(" ");
					printf("%d",vt5[i].second);
					printf("\n");
				}	
			}
		}
		else if(type==2){
			tmp1=0;
			tmp2=0;
			for(int i=0;i<vt.size();i++){
				if(vt[i].first.substr(1,3)==order){
					tmp1++;
					tmp2+=vt[i].second;
				}
			}
			if(tmp1==0){
				printf("NA\n");
			}
			else{
				printf("%d %d\n",tmp1,tmp2);
			}		
		}
		else if(type==3){
			for(int i=0;i<vt.size();i++){
				if(vt[i].first.substr(4,6)==order){
					a[stoi(vt[i].first.substr(1,3))]++;
				}
			}
			for(int i=0;i<1000;i++){
				if(a[i]>0){
					pa2.first=i;
					pa2.second=a[i];
					vt3.push_back(pa2);
					a[i]=0;
				}
			}
			if(vt3.size()==0){
				printf("NA\n");
				continue;
			}
			sort(vt3.begin(),vt3.end(),cmp_diy2);
			for(int i=0;i<vt3.size();i++){
				printf("%d %d\n",vt3[i].first,vt3[i].second);
			}
			vt3.clear();
		}
	}
	return 0;
}

参考

1095 解码PAT准考证 (25 分)测试点分析,附带两个测试点数据! - it610.com

posted @ 2022-07-14 19:30  qwasdasd  阅读(35)  评论(0)    收藏  举报