题解 | #数据分类处理#

数据分类处理

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")

全部评论

相关推荐

我看看你怎么个事来
牛牛爱吃草草:我看看你怎么个事来
点赞 评论 收藏
分享
Lorn的意义:你这种岗位在中国现在要么牛马天天加班,要么关系户进去好吃好喝,8年时间,真的天翻地覆了,对于资本来说你就说一头体力更好的牛马,哎,退伍没有包分配你真的亏了。
点赞 评论 收藏
分享
06-24 19:27
云南大学 Java
点赞 评论 收藏
分享
07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务