這道題要非常細心才行,主要就是給定一些學生的數據,按照給定的指令輸出想要的資訊,但是這道題我卡了半天才過,具體發生了以下錯誤:
#include <iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<cstdlib>
#include<queue>
#include<cstring>
#include<set>
#include<list>
#include<unordered_set>
using namespace std;
struct Card
{
string level;
int score;
string site;
string date;
string name;
string all;
};
struct Node
{
int site;
int num;
}node[1001];
Card a[10010];
int n,m;
bool cmp1(Node& x,Node& y)
{
if(x.num!=y.num)
return x.num>y.num;
else return x.site<y.site;
}
bool cmp(Card& x,Card& y)
{
if(x.score!=y.score)
return x.score>y.score;
else{
return x.all<y.all;
}
}
int sites[1100];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
char temp[100];
int d;
scanf("%s%d",temp,&d);
a[i].level=temp[0];
a[i].score=d;
char site[10]={'\0'},date[10]={'\0'},name[10]={'\0'};
strncpy(site,temp+1,3);
strncpy(date,temp+4,6);
strncpy(name,temp+10,3);
a[i].site=site;
a[i].date=date;
a[i].name=name;
a[i].all=temp;
}
// for(int i=1;i<=n;i++)
// cout<<a[i].level<<" "<<a[i].site<<" "<<a[i].date<<" "<<a[i].score<<" "<<a[i].name<<endl;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=m;i++){
int opt;
string term;
char temp[20];
scanf("%d%s",&opt,temp);
term=temp;
// cin>>opt>>term;
printf("Case %d: %d %s\n",i,opt,term.c_str());
if(opt==1)
{
if(term!="A"&&term!="B"&&term!="T")
{
cout<<"NA"<<endl;
continue;
}
int flag=1;
for(int j=1;j<=n;j++)
{
if(a[j].level==term)
{
printf("%s %d\n",a[j].all.c_str(),a[j].score);
flag=0;
}
}
if(flag==1)cout<<"NA"<<endl;
}
else if(opt==2)
{
int w=stoi(term);
if(w<=100||w>=1000)
{
cout<<"NA"<<endl;
continue;
}
int num=0,ans=0;
for(int j=1;j<=n;j++)
if(a[j].site==term)
{
num++;
ans+=a[j].score;
}
if(num>0)
{
printf("%d %d\n",num,ans);
}
else
printf("NA\n");
}
else if(opt==3)
{
fill(sites+1,sites+1000+10,0);
for(int j=1;j<=n;j++)
{
if(a[j].date==term)
{
int site_digit=stoi(a[j].site);
sites[site_digit]++;
}
}
int cnt=0;
for(int j=0;j<=1000;j++)
{
node[j].site=0;
node[j].num=0;
}
for(int j=101;j<=999;j++)
if(sites[j]>0)
{
cnt++;
node[cnt].site=j;
node[cnt].num+=sites[j];
}
sort(node+1,node+cnt+1,cmp1);
for(int j=1;j<=cnt;j++)
{
printf("%d %d\n",node[j].site,node[j].num);
}
if(cnt==0)
printf("NA\n");
}
}
}