CSP-J/S对拍技巧(仅针对 2023 年的浙江 CSP-J/S 有一定参考意义)

news/2024/10/22 1:29:19

本说明仅针对 2023 年的浙江 CSP-J/S 有效。事实上这个是作者的一个追忆版本。所以仅用作参考。

2023 年 浙江 CSP-J/S 复赛的windows环境是 windows 10,而且还配套有很多软件以及 python 3。

这里仅针对 windows 10 版本进行说明(但是也不保证一定能对)。

所以希望大家仅作参考,因为真不保证今年的比赛也是可以这么做的。仅做学习和参考用途,真不一定和实际环境一样。

正文

首先,我这里新建了一个名为 对拍 的文件夹,并且在 对拍 文件夹下建了一下文件(或文件夹):

  • tle.cpp:对拍程序(跑的比较慢但是数据肯定没问题的C++源文件)
  • std.cpp:提交程序(准备正式提交但是不确定对不对的程序,需要通过对拍进行测试)
  • gen.cpp:用于生成输入数据的程序(用于生成测试数据的C++源程序)
  • duipai.py:用于对拍的python脚本
  • data/ 文件夹

tle.cpp 和 std.cpp

这里为了方便测试,tle.cpp 输入一个整数 a,输出 a;而 std.cpp 输入一个整数 a,在 a 是 3 的倍数时输出 a+1,其他情况下输出 a。

tle.cpp

#include <bits/stdc++.h>
using namespace std;int main() {int a;cin >> a;cout << a << endl;return 0;
}

std.cpp

#include <bits/stdc++.h>
using namespace std;int main() {int a;cin >> a;printf("%d\n", a % 3 == 0 ? a + 1 : a);return 0;
}

gen.cpp

取名为 gen.cpp 主要是用于生成数据。其中:

  • xxx.in 输入数据
  • xxx.ans 通过运行 tle.cpp 编译成的 tle.exe 得到的正确数据
  • xxx.out 通过运行 std.cpp 编译成的 std.exe 得到的测试数据

注:编译运行 gen.cpp 前请建好 data/ 文件夹。

主函数中有 \(3\) 部分:

  • \(1\) 部分用于生成 xxx.in (使用前需要先注释掉第 \(2\)\(3\) 部分)
  • \(2\) 部分用于生成 xxx.ans(使用前需要先注释掉第 \(1\)\(3\) 部分)
  • \(3\) 部分用于生成 xxx.out(使用前需要先注释掉第 \(1\)\(2\) 部分)

如果要多次测试同一组数据,第二次运行前可以注释掉第 \(1\)\(2\) 部分(这样只会更新 xxx.out 文件)。

gen.cpp

#include <bits/stdc++.h>
using namespace std;
mt19937 rng(time(0));int NUM = 50; // NUM 对应的是需要测试的数据组数,可以修改// 封装一个函数用于返回 [l, r] 范围内的随机整数
int random(int l, int r) {return rng() % (r - l + 1) + l;
}// 封装一个用于产生输入数据的函数
void gen_data(int t) {  // 这里的 t 对应的第几组测试数据,即 t.incout << random(1, 1000) << endl;
}int main() {for (int i = 1; i <= NUM; i++) {string filename;// 第 1 部分:产生 .in 文件filename = "data/" + to_string(i) + ".in";freopen(filename.c_str(), "w", stdout);gen_data(i);// 第 2 部分:产生 .ans 文件filename = "data/" + to_string(i) + ".in";freopen(filename.c_str(), "r", stdin);filename = "data/" + to_string(i) + ".ans";freopen(filename.c_str(), "w", stdout);system("tle.exe");// 第 3 部分:产生 .out 文件filename = "data/" + to_string(i) + ".in";freopen(filename.c_str(), "r", stdin);filename = "data/" + to_string(i) + ".out";freopen(filename.c_str(), "w", stdout);system("std.exe");}return 0;
}

duipai.py

数据都生成好了,所以最后是用于对拍的 duipai.py 程序。

2023年浙江复赛的 windows 环境中提供了很多可以打开 py 文件的程序,比如 vs code。

随便打开一个然后运行如下程序:

duipai.py

import osNUM = 50for i in range(1, NUM+1):cmd = f'fc data\{i}.ans data\{i}.out's = os.popen(cmd).read()if 'FC: 找不到差异' in s:print(f'data {i} : ok')else:print(f'data {i} : different')print('是否显示详情? y(是): n(否)', end='')t = input().strip()if t == 'y':print(s)print('以上是所有信息,按回车继续……')input()

如果你觉得有点繁琐,那么以下是 duipai.py 的简化版本:

duipai.py(简化版)

import osNUM = 50for i in range(1, NUM+1):cmd = f'fc data\{i}.ans data\{i}.out's = os.popen(cmd).read()if 'FC: 找不到差异' not in s:print(f'第 {i} 组测试数据不同')exit(0)
print('all same')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74438.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

[Linux Mint]安装搜狗输入法

造冰箱的大熊猫@cnblogs 2024/10/22, Linux Mint 1、从官网下载搜狗拼音输入法的deb包2、安装deb包sudo apt deb sogoupinyin.deb 3、设置输入法框架 - 启动Input Method,将“Input method framework”设置为fcitx - 选择“Simplified Chinese”,点击“Install the language…

chapter4

通过python process.run.py -h命令了解了process.run.py的可用的选项 题外话(关于/home目录的): /home 目录是 Linux 系统中用于存储用户个人文件的地方。每个用户在 /home 下都有一个以其用户名命名的子目录,用于存放该用户的个人数据和设置。以下是一些 /home 目录的特点…

如何以最简单的方式传输文件到开发板上-lrzsz-ZModem

在某鱼上闲逛的时候,看到树莓派A+这个型号的板子,很便宜30来块钱,有6ULL的性能。 但是既没有网口、也没有WiFi,只有一个usb,电脑和它传数据岂不是非常麻烦?其实有一个非常好用的协议叫ZModem,它的设计就是主要为了能在串口这种几乎无需配置的连接协议上传输文件。类似的…

东山Pi柒号-3-STM32MP1 引导链概述

进行移植前先看看ST官网的一些资料,了解芯片的工作方式: STM32MP1 引导链概述 https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP1_boot_chain_overview启动步骤如下BROM(BL1):芯片内部程序,根据BOOT PIN读取对应启动设备里的程序到内部SYSRAM执行,工作在在Secur…

派生类

派生类 1. 派生类2. 派生类对象定义时调用构造函数的顺序 Man man;3. public、protected、private 4. 函数遮蔽

2024年好用的短链接短网址工具推荐

小码短链接,作为一款专业的短链接生成和统计工具,能够帮助您轻松应对各种场景需求,让运营工作变得简单高效。 小码短链接功能介绍 1. 链接缩短 小码短链接不仅可以缩短您的原始链接,还可以提供简洁美观的短链接形式。通过短链接,您可以有效地减少短信或营销内容的字数,从…

Python找不到项目模块解决方法

BiliBili VsCode在使用Python过程中遇到找不到项目模块的问题问题描述 目录及代码如下的项目结构demo ├─ main.py └─ src├─ __init__.py├─ a.py└─ b.py在"src/a.py"文件中有一个方法,代码如下def xxc():print("hello")在"src/b.py"和…

循环结构程序设计

为什么需要循环控制 循环结构或称重复结构 几乎每一种计算机高级语言都提供了循环控制,用来处理需要进行的重复操作 大多数的应用程序都会包含循环结构 循环结构和顺序结构、选择结构是结构化程序设计的3中基本结构,它们是各种复杂程序的基本构成单元。 用 while 语句实现循环…