编程题目分享:统计存储子集的次数

/*
输入int数据n,再输入两个长度为n的int数组,存储子串,不重复存储,计算存储次数。
例如:
第一行输入:3
第二行输入:1 2 3
第三行输入:3 2 1。 
则进行了9次存储,
分别为[1], [2], [3], [1,2], [2,3], [1,2,3], [3,2], [2,1], [3,2,1]。
输出为:9 
*/

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

int main() {
    int n;  // 输入n
    cin >> n;

    vector<int> a1(n);  // 输入a1
    for (int i = 0; i < n; i++) {
        cin >> a1[i];
    }

    vector<int> a2(n);  // 输入a2
    for (int i = 0; i < n; i++) {
        cin >> a2[i];
    }

    set<vector<int>> substring_set;  //用set集合存储,重复内容只存一份
    for (int len = 1; len <= n; len++) {  // 遍历子串长度
        for (int i = 0; i <= n - len; i++) {  // 遍历子串开始位置
            vector<int> substring_vec1;  //用vector容器存储元素,且包含顺序
            vector<int> substring_vec2;
            for (int j = i; j < i + len; j++) {  // 遍历取出字符
                substring_vec1.push_back(a1[j]);
                substring_vec2.push_back(a2[j]);
            }
            substring_set.insert(substring_vec1);  // 子串放入集合
            substring_set.insert(substring_vec2);
        }
    }

    cout << substring_set.size() << endl;  // 输出大小,即集合内个数

    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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