首页 > 其他分享 >SYZOJ 题目 Subtask 配置工具

SYZOJ 题目 Subtask 配置工具

时间:2023-09-20 10:33:09浏览次数:56  
标签:std files 题目 SYZOJ subtask Subtask directory entry include

在程序运行后,需要输入测试数据文件所在的绝对目录,要求测试数据文件名称的格式形如 "1-xxxxxxx",即存在至少一个分隔符 -,且在分隔符前是区分 Subtask 的字符串,相同的内容会按相同 Subtask 对待,分隔符后是任意字符串,可以包含其他分隔符。

Code
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <map>
#include <dirent.h>

// Function to get all file names in a directory
std::vector<std::string> getFilesInDirectory(const std::string &dirPath) {
    std::vector<std::string> files;
    DIR *directory = opendir(dirPath.c_str());
    if (directory) {
        struct dirent *entry;
        while ((entry = readdir(directory))) {
            if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
                files.push_back(entry->d_name);
            }
        }
        closedir(directory);
    }
    return files;
}

int main() {
    // Prompt the user to enter the absolute path of the working directory
    std::cout << "Please enter the absolute path of the working directory: ";
    std::string work_dir;
    std::cin >> work_dir;

    // Get all files in the working directory
    std::vector<std::string> files = getFilesInDirectory(work_dir);

    // Create data structure to store subtasks using std::map
    std::map<std::string, std::vector<std::string>> subtask_cases;

    // Traverse files and classify them by subtask number
    for (const std::string &filename : files) {
        if (filename.find('-') != std::string::npos) {
            std::istringstream iss(filename);
            std::string subtask_number;
            std::getline(iss, subtask_number, '-');

            // Add the filename to the list of test cases for the corresponding subtask
            subtask_cases[subtask_number].push_back(filename);
        }
    }

    // Create the final YAML configuration file
    std::ofstream yaml_file("output.yaml");
    yaml_file << "subtasks:\n";
    for (const auto &entry : subtask_cases) {
        const std::string &subtask_number = entry.first;
        const std::vector<std::string> &test_cases = entry.second;

        yaml_file << "  - score: 20\n";
        yaml_file << "    type: min\n";
        yaml_file << "    cases: [";

        for (size_t i = 0; i < test_cases.size(); ++i) {
            yaml_file << "'" << test_cases[i] << "'";
            if (i < test_cases.size() - 1) {
                yaml_file << ", ";
            }
        }

        yaml_file << "]\n";
    }

    yaml_file.close();

    std::cout << "\nYAML configuration file has been generated as output.yaml" << std::endl;

    // Wait for user to press Enter (Return) key before exiting
    std::cin.ignore();
    std::cout << "\nPress Enter to exit...";
    std::cin.get(); // Wait for Enter key

    return 0;
}

标签:std,files,题目,SYZOJ,subtask,Subtask,directory,entry,include
From: https://www.cnblogs.com/User-Unauthorized/p/SYZOJ-SubTaskMaker.html

相关文章

  • 常见的面试题目准备
    1.字符串反转练习,给定一个字符串,让它反转输出,C语言版include<stdio.h>include<stdlib.h>include<string.h>intmain(){char*source="script_wang";intlength=len(source);char*des=(char*)malloc(length);//开辟一个内存空间char*i=&sourc......
  • 动态内存分配(callco,realloc,笔试题目)2
    相比于malloc加了有一个自动初始化的功能intmain(){ int*p=(int*)calloc(10,sizeof(int));//创建之后就默认数据初始化为0 if(p==NULL) { printf("%s\n",strerror(errno)); } else { inti=0; for(i=0;i<10;i++) { *(p+i)=i; } for(i......
  • 复习C语言-题目 1008: [编程入门]成绩评定
    题目描述给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90分以及90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。输入格式一个整数0-100以内输出格式一个字符,表示成绩等级样例输入复制90样例输出复制A1#inclu......
  • 复习C语言-题目 1009: [编程入门]数字的处理与判断
    题目描述给出一个不多于5位的整数,要求1、求出它是几位数2、分别输出每一位数字3、按逆序输出各位数字,例如原数为321,应输出123输入格式一个不大于5位的数字输出格式三行第一行位数第二行用空格分开的每个数字,注意最后一个数字后没有空格第三行按逆序输出......
  • 问卷调研,支持新增题目,修改题目,题目上移下移,新增选项,选项上移下移,题目跳转功能,支持预览
    <template><divclass="app-container"><el-cardshadow="never"><el-row:gutter="20"type="flex"justify="space-between"><el-col:span="12"style=&......
  • 十道循环题目
    1.输出所有满足下列条件的四位数.条件:个位数字加百位数字等于千位数字加上十位数字,且该该数为奇数.2.求1-100之间所有7的倍数的和,并在页面输出7+14+21+...+...=3.通过for循环实现百钱买百鸡的问题:公鸡5元每只,母鸡3元每只,小鸡3只1元,100元买一百只鸡多少种办法?4.鸡兔同笼3......
  • CTF题目-must use [ctf-Web-Broswer]
    一道CTF题目,请求后页面如下: 这里根据提示需要我们使用ctf-Web-Broswer,这个很明显是更改User-Agent的一个套路python简单写下importrequestsurl='http://1.1.20.100:8001/'headers={"User-Agent":"ctf-Web-Broswer",}res=requests.get(url,headers=headers)print(......
  • CTF题目-message board
    遇到了一道CTF题目,页面如下通过目录扫描可以发现www.tar,一看就知道是网站备份文件,接下来套路估计就是代码审计 打开可以看到2个php文件 看过一遍代码,再结合题目的web页面,就会大概清楚这是一个提交留言的系统,会涉及到数据库的更新和查询操作,数据库查询的语句已经写死......
  • 剑指Offer面试题3题目二:不修改数组找出重复的数字
    一、题目在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或3。输入参数:一个整数数组numbers,......
  • 搜索 题目
    Sudoku(9*9)link1:数据强度弱link2:数据强度强两个优化:按照人类直觉,可以填的数越少的位置越先填使用二进制数字记录一行、列、宫中哪些数字用过,不使用数组,常数优化#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<vector>#include......