HJ25 数据分类处理

题目:
牛客网链接:
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd?tpId=37&tqId=21248&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
image
image

我的答案:

#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <map>

using namespace std;

bool match(const int R, const string &I)
{
    if (I.find(to_string(R)) != std::string::npos)
    {
        return true;
    }
    return false;
}

int main() {
    int iNum;
    int rNum;
    int iItem;
    string sItem;
    cin >> iNum;
    vector<string> Is;
    while (iNum-- > 0)
    {
        cin >> sItem;
        Is.push_back(sItem);
    }
    cin >> rNum;
    map<int, vector<pair<int, string>>> IPairs;
    while (rNum-- > 0)
    {
        cin >> iItem;
        vector<pair<int, string>> tmp;
        IPairs[iItem] = tmp;
    }

    for (auto &it : IPairs)
    {
        for (int i = 0; i < Is.size(); i++)
        {
            if (match(it.first, Is[i]))
            {
                it.second.emplace_back(i, Is[i]);
            }
        }    
    }

    int ansNum = 0;
    for (auto &it : IPairs)
    {
        if (it.second.size() != 0)
        {
            ansNum += 2;
            ansNum += 2 * it.second.size();
        }
        
    }

    cout << ansNum << " ";
    for (auto &it : IPairs)
    {
        if (it.second.size() != 0)
        {
            cout << it.first << " " << it.second.size() << " ";
            for (auto &itt : it.second)
            {
                cout << itt.first << " " << itt.second << " ";
            }
        }
        
    }

    return 0;

}
posted @ 2025-02-15 00:47  夏日花雪夜  阅读(93)  评论(0)    收藏  举报