题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336
这个题坑到爆啊!!!思路很简单,输出格式%07d,我真的是绞尽脑汁在逻辑上找问题了。
因为没有超时,所以没有用映射。
#include <cstdio>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct books{
int id;
string title, author, keyword, publisher, year;
}book[10010];
bool cmp(books a, books b){
return a.id < b.id;
}
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d%*c", &book[i].id);
getline(cin, book[i].title);
getline(cin, book[i].author);
getline(cin, book[i].keyword);
getline(cin, book[i].publisher);
getline(cin, book[i].year);
}
sort(book, book+n, cmp);
int m;
scanf("%d", &m);
for(int i = 0; i < m; i++){
int f;
scanf("%d%*c%*c", &f);
string str;
int y, flag = 0;
getline(cin, str);
cout<<f<<": "<<str<<endl;
switch(f){
case 1:
for(int j = 0; j < n; j++){
if(book[j].title == str){
printf("%07d\n", book[j].id);
flag++;
}
}
break;
case 2:
for(int j = 0; j < n; j++){
if(book[j].author == str){
printf("%07d\n", book[j].id);
flag++;
}
}
break;
case 3:
for(int j = 0; j < n; j++){
string key;
int k = 0;
while(k < book[j].keyword.length()){
while(k < book[j].keyword.length() && book[j].keyword[k] != ' '){
key += book[j].keyword[k];
k++;
}
if(key == str){
printf("%07d\n", book[j].id);
flag++;
}
key.clear();
k++;
}
}
break;
case 4:
for(int j = 0; j < n; j++){
if(book[j].publisher == str){
printf("%07d\n", book[j].id);
flag++;
}
}
break;
default:
for(int j = 0; j < n; j++){
if(book[j].year == str){
printf("%07d\n", book[j].id);
flag++;
}
}
}
if(!flag)
printf("Not Found\n");
}
return 0;
}