题解 | #数据分类处理#

数据分类处理

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

#include <array>
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;

const int N=110;
int n,m;
array<array<int,N>, N> a;
array<string,N>p;

bool isSubstr(string s1,string s2){
    int l1=s1.length(),l2=s2.length();
    
    for(int i=0,j=0;i<l1;i++){
        while(i<l1&&s1[i]!=s2[j])i++;
        int temp=i;
        while(j<l2&&i<l1&&s1[i]==s2[j]){
            i++,j++;
        }
        if(j==l2){
            //cout<<s1<<"  .  "<<s2<<"  ."<<endl;
            return true;
        }
        else{
            j=0,i=temp;
        }
    }
    return false;
}
int main() {
    vector<string> vi;
    map<int, int>mr;
    cin>>n;
    string str;
    for(int i=1;i<=n;i++){
        cin>>str;
        vi.push_back(str);
    }
    cin>>m;
    int num;
    for(int i=1;i<=m;i++){
        cin>>num;
        mr[num]++;
    }

    int index=0,sum=0;
    for(auto i:mr){
        string s=to_string(i.first);
        bool flag=false;
        
        for(int j=0;j<vi.size();j++){
            if(isSubstr(vi[j], s)){
                flag=true;
                a[index][0]++;
                a[index][a[index][0]]=j;
            }
        }
        if(flag){
            p[index]=s;
            index++;
            sum++;
        }
    }
    for(int i=0;i<index;i++){
        sum++;
        sum+=a[i][0]*2;
    }

    cout<<sum<<" ";
    for(int i=0;i<index;i++){
        cout<<p[i]<<" "<<a[i][0]<<" ";
        for(int j=1;j<=a[i][0];j++)
            cout<<a[i][j]<<" "<<vi[a[i][j]]<<" ";
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

02-28 01:18
已编辑
南昌大学 后端工程师
后测速成辅导一两个月...:把开源经历放个人项目上边应该更好,就像大部分人都把实习经历放个人项目上边
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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