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

浙公网安备 33010602011771号