当前位置: 首页 > news >正文

一道原创OI题(普及-)——ZCS的随机游走的数据生成器

Code:

#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;

// 生成随机整数
int randInt(int min, int max) {
    return min + rand() % (max - min + 1);
}

// 生成网格
vector<string> generateGrid(int n, int m, int& start_i, int& start_j) {
    vector<string> grid(n, string(m, '.'));
    // 随机生成初始位置
    start_i = randInt(0, n - 1);
    start_j = randInt(0, m - 1);
    grid[start_i][start_j] = '#';
    // 随机生成障碍物
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (i == start_i && j == start_j) continue;
            if (randInt(0, 1) == 1) {
                grid[i][j] = 'X';
            }
        }
    }
    return grid;
}

// 生成移动方向
vector<int> generateOpts(int x) {
    vector<int> opts(x);
    for (int i = 0; i < x; ++i) {
        opts[i] = randInt(1, 4);
    }
    return opts;
}

// 输出数据到控制台
void outputData(int n, int m, int x, const vector<string>& grid, const vector<int>& opts) {
    // 输出 n, m, x
    cout << n << " " << m << " " << x << endl;
    // 输出网格
    for (size_t i = 0; i < grid.size(); ++i) {
        cout << grid[i] << endl;
    }
    // 输出移动方向
    for (size_t i = 0; i < opts.size(); ++i) {
        cout << opts[i] << endl;
    }
    // 输出分隔符
    cout << "----------------------" << endl;
}

// 生成小数据
void generateSmallData() {
    for (int i = 1; i <= 10; ++i) {
        int n = randInt(1, 100);
        int m = randInt(1, 100);
        int x = randInt(1, 1000);
        int start_i, start_j;
        vector<string> grid = generateGrid(n, m, start_i, start_j);
        vector<int> opts = generateOpts(x);
        outputData(n, m, x, grid, opts);
    }
}

// 生成大数据
void generateLargeData() {
    for (int i = 1; i <= 10; ++i) {
        int n = randInt(10000, 100000);
        int m = randInt(10000, 100000);
        int x = randInt(1000000, 10000000);
        int start_i, start_j;
        vector<string> grid = generateGrid(n, m, start_i, start_j);
        vector<int> opts = generateOpts(x);
        outputData(n, m, x, grid, opts);
    }
}

int main() {
    srand(static_cast<unsigned int>(time(0))); // 初始化随机数种子
    generateSmallData(); // 生成小数据
    generateLargeData(); // 生成大数据
    return 0;
}

相关文章:

  • 飞机燃油系统故障频发?数字仿真带来全新解决方案
  • 课程5. 迁移学习
  • Spring Boot集成Redis并设置密码后报错: NOAUTH Authentication required
  • 2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷
  • 参数估计学习笔记通俗易懂版(包括点估计和区间估计(区间估包括总体均值的置信区间(总体标准差未知、总体标准差已知)和总体方差的置信区间))
  • Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
  • 【React】useMemo、useCallback
  • 关于VSCode使用过程中的一些问题记录(持续更新)
  • kernel中外部传递参数使用方法
  • 20250321在荣品的PRO-RK3566开发板的buildroot系统下使用UART1
  • 几个JSON在AutoCAD二次开发中应用比较有优势的场景及具体案例
  • 威联通 后台可用命令查看Bash
  • <项目> 主从Reactor模型的高并发服务器
  • Python与区块链隐私保护技术:如何在去中心化世界中保障数据安全
  • vlan实验
  • Python异常简介
  • Manus与Dify差异分析
  • 19.哈希表的实现
  • 【数据结构】kmp算法介绍+模板代码
  • 树莓集团落子海南,解读数字产业新势力
  • 中国驻美国大使馆发言人就中美经贸高层会谈答记者问
  • 对话|蓬皮杜策展人布莱昂:抽象风景中的中国审美
  • 公募基金解读“一揽子金融政策”:增量财政空间或打开,有助于维持A股活力
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水
  • 【社论】三个“靠谱”为市场注入确定性
  • 金融监管总局将出八大增量政策,李云泽详解稳楼市稳股市“组合拳”