社区讨论

提供一个数据生成器

P4135作诗参与者 6已保存回复 18

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
18 条
当前快照
1 份
快照标识符
@mhj2xam5
此快照首次捕获于
2025/11/03 19:51
4 个月前
此快照最后确认于
2025/11/03 20:41
4 个月前
查看原帖
CPP
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
#include <set>
#include <chrono>

using namespace std;

// 可以在代码中方便修改的常量
const int MAX_N = 10;  // n, m, c的最大值

class DataGenerator {
private:
    mt19937 rng;
    
public:
    DataGenerator() {
        // 使用毫秒级时间作为随机数种子
        auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();
        rng.seed(static_cast<unsigned int>(seed));
    }
    
    // 生成指定范围内的随机整数
    int randInt(int l, int r) {
        uniform_int_distribution<int> dist(l, r);
        return dist(rng);
    }
    
    void generate() {
        // 生成n, c, m
        int n = MAX_N;
        int c = randInt(1, min(n, MAX_N));  // c不能超过n
        int m = MAX_N;
        
        cout << n << " " << c << " " << m << endl;
        
        // 生成第二行的n个整数,确保恰好有c个不同的数字,且所有数字都在1到c范围内
        vector<int> arr(n);
        set<int> uniqueNums;
        
        // 先生成c个不同的数字,范围是1到c
        for (int i = 1; i <= c; i++) {
            uniqueNums.insert(i);
        }
        
        // 将这c个不同的数字随机分配到数组中
        vector<int> distinctNums(uniqueNums.begin(), uniqueNums.end());
        
        // 前c个位置放不同的数字(即1到c的所有数字)
        for (int i = 0; i < c; i++) {
            arr[i] = distinctNums[i];
        }
        
        // 剩下的位置随机从c个数字中选择
        for (int i = c; i < n; i++) {
            arr[i] = distinctNums[randInt(0, c - 1)];
        }
        
        // 打乱数组顺序
        shuffle(arr.begin(), arr.end(), rng);
        
        // 输出第二行
        for (int i = 0; i < n; i++) {
            cout << arr[i];
            if (i < n - 1) cout << " ";
        }
        cout << endl;
        
        // 生成m个查询区间[L, R]
        for (int i = 0; i < m; i++) {
            int L = randInt(1, n);
            int R = randInt(L, n);
            cout << L << " " << R << endl;
        }
    }
};

int main() {
//	freopen("in.txt","w",stdout);
    DataGenerator generator;
    generator.generate();
    return 0;
}

回复

18 条回复,欢迎继续交流。

正在加载回复...