• A1022


    #include<iostream>
    #include<vector>
    #include <string>
    #include <set>
    using namespace std;
    struct book{
    	int ID;
    	string title;
    	string author;
    	vector<string>key_word;
    	string publisher,year;
    };
    int main(){
    	int n,m,t_ID,temp,flag=0;
    	string t_title,t_author,t_key,t_pub,content,t_year;
    	cin>>n;
    	vector<book>B(n);
    	for(int i=0;i<n;i++){
    		book b;
    		cin>>t_ID;
    		getchar();
    		getline(cin,t_title);
    		getline(cin,t_author);
    		while(cin>>t_key){
                b.key_word.push_back(t_key);
                 char c=getchar();
                if(c=='
    ')
                    break;
            }
            getline(cin,t_pub);
    		cin>>t_year;
    		b.ID=t_ID;
    		b.title=t_title;
    		b.author=t_author;
    		b.publisher=t_pub;
    		b.year=t_year;
    		B.push_back(b);
    	}
    	cin>>m;
    	set<int>S;
    	for(int i=0;i<m;i++){
    		scanf("%d: ",&temp);
    		getline(cin,content);
    		if(temp==1){
    			for(int j=0;j<B.size();j++){
    				if(B[j].title==content){
    					S.insert(B[j].ID);
    					flag=1;
    				}
    			
    			}
    		}
    		if(temp==2){
    			for(int j=0;j<B.size();j++){
    				if(B[j].author==content){
    					S.insert(B[j].ID);
    					flag=1;
    				}
    			}
    		}	
    		if(temp==3){
    			for(int j=0;j<B.size();j++){
    				for(int k=0;k<B[j].key_word.size();k++)
    				if(B[j].key_word[k]==content){
    					S.insert(B[j].ID);
    					flag=1;
    				}
    			}
    		}	
    		if(temp==4){
    			for(int j=0;j<B.size();j++){
    				if(B[j].publisher==content){
    					S.insert(B[j].ID);
    					flag=1;
    				}			
    			}
    		}
    		if(temp==5){
    			for(int j=0;j<B.size();j++){
    				if(B[j].year==content){
    					S.insert(B[j].ID);
    					flag=1;
    				}
    			}
    		}
    		if(flag==1){
    			cout<<temp<<": "<<content<<endl;
    			for(auto it=S.begin();it!=S.end();it++) printf("%07d
    ",*it);
    			
    		}		
    		
    		else{
    			cout<<temp<<": "<<content<<endl;
    			cout<<"Not Found"<<endl;
    		}
    		S.clear();
    		flag=0;
    	}
    	return 0;
    }
    

      将有空格隔开的一个字符串分为数个字符串时可以用:

    while(cin>>t_key){
                b.key_word.push_back(t_key);
                 char c=getchar();
                if(c=='
    ')
                    break;
            }
    

      ==============在拿到此题的时候我感觉这题可以用map来做,但是还是觉得用结构体模拟要简单一点,下面我想用map试试

    =======================================================================================================================

    #include<iostream>
    #include<vector>
    #include <string>
    #include <map>
    #include <set>
    using namespace std;
    int main(){
    	int ID,m,n,temp;
    	string author,publisher,key,title,year,content;
    	cin>>n;
    	vector<multimap <string,int> >v(5);
    	for(int i=0;i<n;i++){
    		cin>>ID;
    		getchar();
    		getline(cin,title);
    		getline(cin,author);
    		while(cin>>key){
    			v[2].insert(pair<string, int>(key, ID));
    			char c=getchar();
    			if(c=='
    ') break;
    		}
    		getline(cin,publisher);
    		getline(cin,year);
    		v[0].insert(pair<string, int>(title, ID));
    		v[1].insert(pair<string, int>(author, ID));
    		v[3].insert(pair<string, int>(publisher, ID));
    		v[4].insert(pair<string, int>(year, ID));
    	}		
    	cin>>m;
    	set<int>S;
    	for(int i=0;i<m;i++){
    		scanf("%d: ",&temp);
    		getline(cin,content);
    		cout<<temp<<": "<<content<<endl;
    		for(auto it=v[temp-1].begin();it!=v[temp-1].end();it++){
    			if(it->first==content) 
    			S.insert(it->second);
    		}	
    		if(!S.empty())
    		for(auto it=S.begin();it!=S.end();it++) printf("%07d
    ",*it);
    		else cout<<"Not Found"<<endl;
    		S.clear();
    	} 
    	return 0;
    }
    

      经过测试后面两个测试点需要使用printf("%07d ",*it);才能通过;

    在使用map时没有注意到一个key这能对于一个value,导致每个测试只能输出一个查询结果,这是因为比如2011这个key可以对于1111111和222222,而后输入的容易将先输入的覆盖,这是我使用了

    vector<multimap <string,int> >v(5);
    仅仅是定义时不一样其他的完全一样


    还有就是map的插入方式有点特殊
    v[0].insert(pair<string, int>(title, ID));
    这点要记牢,不然考试时容易翻车
  • 相关阅读:
    【百度地图API】如何获取行政区域的边界?(转载)
    Javascript原型,原型链?有什么特点?
    什么是闭包?为什么使用闭包?闭包的缺点?
    为什么利用多个域名来存储网站资源会更有效?
    javascript如何处理很多数据,类似分页切换
    关于模板引擎handlebars.js基本用法
    关于CSS3的filter(滤镜) 属性
    App里面如何正确显示用户头像
    jQuery性能优化的一些参考建议
    文字超出显示省略号
  • 原文地址:https://www.cnblogs.com/tao7/p/12236188.html
Copyright © 2020-2023  润新知