一开始拿了19分,搜了搜别人代码都是用string的,突然反应过来id用int可能会导致输出id不正确(比如是0000000什么的),改了以后就全都过啦!
代码没有用map,如下:
#include<bits/stdc++.h>
using namespace std;
int N,M;
struct book{
string id,year;
string title,author,key,publisher;
};
book bk[10001];
int sorts[1001];
int flag=0;
bool comp(book a,book b){
return a.id<b.id;
}
int main()
{
cin>>N;
int i,j,k,l;
string s1,s2,s3,s4;
for(i=0;i<N;i++){
cin>>bk[i].id;
getchar();
getline(cin,bk[i].title);
getline(cin,bk[i].author);
getline(cin,bk[i].key);
getline(cin,bk[i].publisher);
cin>>bk[i].year;
}
sort(bk,bk+N,comp);
cin>>M;
for(i=0;i<M;i++){
cin>>sorts[i];
getchar();getchar();
cout<<sorts[i]<<": ";
switch(sorts[i]){
case 1:{
getline(cin,s1);
cout<<s1<<endl;
for(j=0;j<N;j++){
if(bk[j].title==(s1)){
cout<<bk[j].id<<endl;
flag=1;
}
}
if(flag==0){
cout<<"Not Found"<<endl;
}
flag=0;
};break;
case 2:{
getline(cin,s1);
cout<<s1<<endl;
for(j=0;j<N;j++){
if(bk[j].author==(s1)){
cout<<bk[j].id<<endl;
flag=1;
}
}
if(flag==0){
cout<<"Not Found"<<endl;
}
flag=0;
};break;
case 3:{
getline(cin,s1);
cout<<s1<<endl;
for(j=0;j<N;j++){
if(bk[j].key.find(s1)!=string::npos){
cout<<bk[j].id<<endl;
flag=1;
}
}
if(flag==0){
cout<<"Not Found"<<endl;
}
flag=0;
};break;
case 4:{
getline(cin,s1);
cout<<s1<<endl;
for(j=0;j<N;j++){
if(bk[j].publisher==(s1)){
cout<<bk[j].id<<endl;
flag=1;
}
}
if(flag==0){
cout<<"Not Found"<<endl;
}
flag=0;
};break;
case 5:{
cin>>s1;
cout<<s1<<endl;
for(j=0;j<N;j++){
if(bk[j].year==s1){
cout<<bk[j].id<<endl;
flag=1;
}
}
if(flag==0){
cout<<"Not Found"<<endl;
}
flag=0;
};break;
}
}
}