QQ好友

Problem B: QQ好友

Problem B: QQ好友

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 343   Solved: 43
[ Submit][ Status]

Description

QQ已经成为现代人们生活中进行沟通、交流的重要手段。通过简单抽象,QQ好友的管理可以通过如下类进行表示:
1. QQ类:包括一个int类型的属性,表示QQ号码;一个string类型属性,是QQ昵称。至少有一个构造函数QQ(int,string),用于初始化相关属性。
假设QQ号码互不相同。
2. Group类:用于对好友进行分组。包括一个string类型的属性,表示好友组的组名;一个组内QQ好友的列表,即QQ类的对象的列表。至少有如下方法:
(1)构造函数Group(string)。
(2)void addQQ(const QQ&):向好友列表中追加好友。
假设所有的组名互不相同。
3. Friends类:包括一个Group类的对象的列表。至少包括如下方法:
(1)void addGroup(const Group&):追加一个好友组。
(2)void findGroup(string gName):输出指定组名gName下的所有QQ好友。输出时的格式为:
Group # :qq_id1 qq_name1; qq_id2 qq_name2; ......
其中“#”是组名,即参数gName。“qq_id1 qq_name1”等是该组内QQ好友的号码和昵称。输出时,QQ好友信息之间用一个分号(;)和一个空格隔开,最后一个后面有一个句点(.)。按照QQ号码从小到大的顺序输出。
如果该组中没有好友,则输出:Group # :empty.
如果指定的组不存在,则输出:Group # :not existing.
(3)void findQq(int id):输出指定的QQ号码id所属于的组名。输出格式为:
QQ $ in : group_name1;group_name2;......
其中,“$”表示指定的QQ号码,即参数id的值。“group_name1”等是该号码对应的QQ好友所在的组名列表,按照组名从小到大输出。组名之间用一个分号(;)和一个空格隔开,最后一个后面有一个句点(.)。
如果该QQ不存在,则输出:QQ $ in : empty.

Input

输入有很多行,分为四部分。
第一部分只有一行,是一个整数M>0,表示之后有M个好友组。
第二部分输入好友组的信息。每个好友组的输入包括2部分:第一部分只有一行,包括组名及该组下好友的个数N。第二部分有N行,每行是一个好友的号码和昵称。
第三部分的第一行是一个整数K>0,表示之后有K行,每行是一个组名。
第四部分的第一行是一个整数L>0,表示之后有L行,每行是一个QQ号码。

Output

见样例和题目描述。

Sample Input

2 Friends 4 1 Jack 2 Tom 3 Mary 4 Richard Enemies 2 4 Richard 2 Tom 2 Friends enemy 2 1 2
#include <iostream>
#include <string>
#include <vector>
#include <set>
using namespace std;

class QQ{
  
public:
    int number_;
    string name_;
    
    QQ(int n,string name):number_(n),name_(name){
        
    }
   friend bool operator<(const QQ &p,const QQ &q){
        return p.number_ < q.number_;
    }
    
};

class Group{
    
public:
    string Friendname_;
    vector<QQ> gfm_;
    Group(string name):Friendname_(name){
        
    }
    void addQQ(const QQ& q){
        gfm_.push_back(q);
    }
};

class Friends{
  
public:
    vector<Group> fg_;
    
    void addGroup(const Group& g){
        fg_.push_back(g);
    }
    void findGroup(string gName){
        bool flag = false;
        set<QQ> sq;
        for(int i =0 ;i<fg_.size();i++){
            
            if(fg_[i].Friendname_ == gName){
                cout <<"Group "<<gName<<" :";
                if(fg_[i].gfm_.size() == 0 ){
                    cout<<" empty."<<endl;
                }else{
                    
                    for(int j= 0 ;j<fg_[i].gfm_.size();j++){
                        sq.insert(fg_[i].gfm_[j]);
                    }
                    
                }
               flag = true;
            }
        }
        vector<QQ> temp;
        set<QQ>::iterator it;
        for(it = sq.begin();it!=sq.end();it++){
            temp.push_back((*it));
        }
        for(int i=0;i<temp.size();i++){
            
            if(i+1 == temp.size()){
                cout<<" "<<temp[i].number_<<" "<<temp[i].name_<<"."<<endl;
            }else{
                cout<<" "<<temp[i].number_<<" "<<temp[i].name_<<";";
            }
        }
        if(!flag){
            cout <<"Group "<<gName<<" : not existing."<<endl;;
        }
        
    }
    
    void findQq(int id){
        set<string> dname;
        cout <<"QQ "<<id<<" in :";
        bool flag = false;
        for(int i =0 ;i<fg_.size();i++){
            
                    for(int j= 0 ;j<fg_[i].gfm_.size();j++){
                       
                        if(fg_[i].gfm_[j].number_ == id){
                            
                            dname.insert(fg_[i].Friendname_);
                        }
                    }
        }
        vector<string> temp;
        set<string>::iterator it;
        for(it = dname.begin();it!=dname.end();it++){
            temp.push_back((*it));
        }
        
        
        for(int i=0;i<temp.size();i++){
            
            if(i+1 == temp.size()){
                cout<<" "<<temp[i]<<"."<<endl;;
            }else{
                cout<<" "<<temp[i]<<";";
            }
        }
        if(temp.size() == 0){
            cout<<" empty."<<endl;;
        }
        
    }
    
};


int main()
{
    int m, n, i, j, id;
    string str;
    Friends friends;
    cin>>m;
    for (i = 0; i < m; i++)
    {
        cin>>str>>n;
        Group group(str);
        for (j = 0; j < n; j++)
        {
            cin>>id>>str;
            QQ qq(id, str);
            group.addQQ(qq);
        }
        friends.addGroup(group);
    }
    
    cin>>m;
    for (i = 0; i < m; i++)
    {
        cin>>str;
        friends.findGroup(str);
    }
    
    cin>>n;
    for (i = 0; i < n; i++)
    {
        cin>>j;
        friends.findQq(j);
    }
    return 0;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值