题解 | #数据分类处理#

数据分类处理

https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd

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

// I是否包含R?
bool isInclude(int I, int R) {
    string si = to_string(I);
    string sr = to_string(R);
    int leni = si.length();
    int lenr = sr.length();
    for(int i=0; i<leni-lenr+1; ++i) {
        if(sr.compare(si.substr(i, lenr)) == 0) return true;
    }
    return false;
}

int main() {
    int n;
    cin >> n;
    vector<int> I(n);
    for(int i=0; i<n; ++i) cin >> I[i];
    cin >> n;
    set<int> R;
    for(int i=0; i<n; ++i) {
        int a;  cin>> a;
        R.insert(a);
    }

    vector<vector<int>> result; // I中不同元素对应结果存储在不同vector中
    vector<int> rR; // 需要输出的R
    int num = 0;    // 输出的整数个数
    for(int r : R) {
        // map<int, int> RIm;  // 当前R对应的
        vector<int> ri;
        for(int i=0; i<I.size(); ++i) {
            if(isInclude(I[i], r)) ri.push_back(i);
        }
        if(!ri.empty()) {
            result.push_back(ri);
            rR.push_back(r);
            num += 2 * (int)ri.size() + 2;  // I元素+序号+R元素
        }
    }

    // 输出
    vector<int> output;
    output.push_back(num);
    for(int i=0; i<rR.size(); ++i) {
        output.push_back(rR[i]);
        output.push_back(result[i].size());
        for(int a : result[i]) {
            output.push_back(a);
            output.push_back(I[a]);
        }
    }
    
    for(int i=0; i<output.size(); ++i) {
        if(i < output.size() - 1) cout << output[i] << " ";
        else cout << output[i];
    }

    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务