网易云2018游戏开发笔试--泡泡沟通,群成员排序

题目描述:

网易内部都使用泡泡作为沟通的工具。对于一个群组,泡泡显示当前群成员列表的规则为:

  1. 当前状态分为在线/离线两种,在线的人员会比离线的人员显示靠前;
  2. 每个群组都有拥有者,管理员以及普通成员三种身份,当两人当前状态相同时,拥有者的显示会最靠前,其次是管理员,最后是普通成员。一个群组可能有多个拥有者和多个管理员;
  3. 如果两人当前状态以及身份都相同时,则按名字的字典序从小到大排序。

假设一个群组一开始所有成员都是离线状态(按姓名字典序从小到大排序),经过一系列成员的上线/下线操作之后,求出当前的群组成员显示列表。

输入描述:

每个输入数据只包含1个测试点。

每个测试点的第一行为数字N ,N范围为(0,50],表示群组的人数,然后下面是N行,每行描述一位群成员的信息:第一个数字表示身份(0为普通成员,1为管理员,2为拥有者),紧接着是成员的昵称,昵称只包含小写字母,且长度不超过30。没有成员的昵称相同。

然后一行是数字M,M范围为(0,1000],表示有M个成员状态变化的记录,后面M行,以时间从先到后的顺序列出状态变化记录,每行首先是成员昵称,然后用一个数字表示该成员的操作s,(0表示下线,1表示上线),保证状态切换合法,即离线状态只会为上线操作,在线状态只会为离线操作。

输出描述:

输出M个成员状态变化记录后,成员列表的显示状态。输出N行,每行一个成员昵称。
这里写图片描述
这里写图片描述

解题思路:
在一个二维向量中保存用户信息,有n个用户就有n行,每一行有三个参数,分别表示姓名,状态(Y为在线,N为离线)和身份(0为普通成员,1为管理员,2为拥有者),将状态初始化为离线状态。遍历所有的离线/在线状态变化,修改相应的状态信息,最后按照字典序先后输出 在线拥有着,在线管理员,在线普通成员,离线拥有着,离线管理员,离线普通成员

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    int n, rank;
    string name, state = "N";                      //所有人状态初始化为离线
    vector<vector<string> >people;
    cin >> n;
    //vector有n行,表示有n个人,每一行有三个元素,分别为姓名,
    //状态(Y为在线,N为离线)和身份(0为普通成员,1为管理员,2为拥有者)
    for (int i = 0; i < n; i++)
    {
        cin >> rank;
        cin >> name;
        vector<string> tmp;

        tmp.push_back(name);                      //姓名
        tmp.push_back(state);                     //状态
        tmp.push_back(to_string(rank));           //身份

        people.push_back(tmp);                    //向people中push_back的元素为vector
    }

    int numchange;
    cin >> numchange;
    int change;                                   //操作(0表示下线,1表示上线)
    //每一次上线离线操作,找出对应的人,修改对应的状态
    for (int i = 0; i < numchange; i++)
    {
        cin >> name;
        cin >> change;
        for (int j = 0; j < n; j++)
        {
            if (name == people[j][0])
            {
                if (change == 1)                  //查找对应的人
                    people[j][1] = "Y";
                else if (change == 0)             //修改对应的状态
                    people[j][1] = "N";
            }
        }
    }
    //查看所有人的信息(姓名,状态,身份)
    for (int i = 0; i < people.size(); i++)
    {
        for (int j = 0; j < people[0].size(); j++)
        {
            cout << people[i][j] << "  ";
        }
        cout << endl;
    }

    vector<string>result;

    vector<string>tmp1;
    for (int i = 0; i < people.size(); i++)
    {

        if (people[i][1] == "Y"&&people[i][2] == "2")
            tmp1.push_back(people[i][0]);
    }
    sort(tmp1.begin(), tmp1.end());
    for (int i = 0; i < tmp1.size(); i++)
        result.push_back(tmp1[i]);

    vector<string>tmp2;
    for (int i = 0; i < people.size(); i++)
    {
        if (people[i][1] == "Y"&&people[i][2] == "1")
            tmp2.push_back(people[i][0]);
    }
    sort(tmp2.begin(), tmp2.end());
    for (int i = 0; i < tmp2.size(); i++)
        result.push_back(tmp2[i]);

    vector<string>tmp3;
    for (int i = 0; i < people.size(); i++)
    {
        if (people[i][1] == "Y"&&people[i][2] == "0")
            tmp3.push_back(people[i][0]);
    }
    sort(tmp3.begin(), tmp3.end());
    for (int i = 0; i < tmp3.size(); i++)
        result.push_back(tmp3[i]);

    vector<string>tmp4;
    for (int i = 0; i < people.size(); i++)
    {
        if (people[i][1] == "N"&&people[i][2] == "2")
            tmp4.push_back(people[i][0]);
    }
    sort(tmp4.begin(), tmp4.end());
    for (int i = 0; i < tmp4.size(); i++)
        result.push_back(tmp4[i]);

    vector<string>tmp5;
    for (int i = 0; i < people.size(); i++)
    {
        if (people[i][1] == "N"&&people[i][2] == "1")
            tmp5.push_back(people[i][0]);
    }
    sort(tmp5.begin(), tmp5.end());
    for (int i = 0; i < tmp5.size(); i++)
        result.push_back(tmp5[i]);

    vector<string>tmp6;
    for (int i = 0; i < people.size(); i++)
    {
        if (people[i][1] == "N"&&people[i][2] == "0")
            tmp6.push_back(people[i][0]);
    }
    sort(tmp6.begin(), tmp6.end());
    for (int i = 0; i < tmp6.size(); i++)
        result.push_back(tmp6[i]);

    cout << endl;

    for (int i = 0; i < result.size();i++)
        cout << result[i]<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/happyjacob/article/details/81546156