信息学竞赛对拍器的设计

2023-10-15 02:50
文章标签 设计 竞赛 信息学 拍器

本文主要是介绍信息学竞赛对拍器的设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面的内容是我很久以前写的,内容冗长,不怎么实用,比较简洁的代码请参考:

1.对拍器

2.数据生成器


信息学竞赛中,很多时候我们需要检验需要提交程序的正确性,但手动测试有太慢而且不准确。

所以我们可以写两个程序,一个用于提交,另一个测试(通常是比较正确但是往往用暴力写的,会超时),

当然写对拍器之前要写数据生成器,以后介绍,这是最简单的A+B Problem的数据生成器:

#include<bits/stdc++.h>
using namespace std;
int main(){freopen("in.txt","w",stdout);//请根据需要自行修改数据生成代码 int a,b;srand(time(0));a=rand();b=rand();printf("%d %d",a,b);return 0;
}

对拍器就是用于测试数据并比较两程序的输出是否相同的程序,下面介绍对拍器的写法:

方法一:

代码如下(程序B):

@echo off
set cnt=0
for /l %%i in (1,1,10) do ( 
::相当于for(int i = 1;i <= 10;i++) ,可以修改第三个数字来改变测试次数randdata.exestd.exemine.exefc out1.txt out2.txt >result.txtif errorlevel 1 ( ::如果发现不一致set cnt=1echo %%i:UnAccepted!pause)if  not errorlevel 1 echo %%i:Accepted!
)
if %cnt%==0 color a && echo *** Totally Accepted! ***
if %cnt%==1 color c && echo *** Not All Accepted! ***
pause

以上代码是批处理写的,有兴趣的可以学习一下,还是有用的

讲代码拷贝到记事本,然后保存为 xxx.bat 或 xxx.cmd (xxx为文件名),就可以运行了

但是需要遵守以下规则:

I.使用程序A或B每个程序需要添加的语句:
  a.你的程序:
    1.需要把程序名称改为mine.cpp
    2.添加到main函数开头:
freopen("in.txt","r",stdin);
freopen("out1.txt","w",stdout);
  b.标准程序(或暴力正确程序)
    1.把程序名称改为std.cpp
    2.添加到main函数开头:
freopen("in.txt","r",stdin);

freopen("out2.txt","w",stdout);

还有另一种写法(程序C):

@echo off
set cnt=0
for /l %%i in (1,1,10) do (randdata.exestd.exe < in.txt > out1.txtmine.exe < in.txt > out2.txtfc out1.txt out2.txt > result.txtif errorlevel 1 (set cnt=1echo %%i:UnAccepted!pause)if not errorlevel 1 echo %%i:Accepted!
)
if %cnt%==0 color a && echo *** Totally Accepted! ***
if %cnt%==1 color c && echo *** Not All Accepted! ***
pause

II.使用程序C需要把freopen语句注释掉,程序名称同I

方法二:

先说方法二的优缺点:程序A界面比B稍友好一些,但有时会判断错误

代码如下(程序A):

on error resume next '忽略所有错误
set obj=createobject("wscript.shell")
set fso=createobject("scripting.filesystemobject")
dim ct,result,cnt
cnt=0
ct=inputbox("请输入需要测试的次数:","提示")
if ct>40 thenct=40msgbox"测试次数不能大于40,自动改为40次",vbinformation,"提示"
end if
for i=1 to ctobj.run"randdata.exe",true		'启动数据生成程序obj.run"std.exe",true	'启动标准程序(或暴力但准确性可以保证的程序)obj.run"mine.exe",true		'启动你的程序obj.run"datacmp.exe",true		'启动对比程序set fread=fso.opentextfile("result.txt",1)result=fread.readall			'记录测试结果fread.closeif result<>"0" then			'发现错误msgbox"发现错误:第" & i & "次测试" & chr(13) & "错误行数:" & result ,16,"提示"cnt=cnt+1end if
next
obj.run"taskkill -f -im std.exe"
obj.run"taskkill -f -im mine.exe"
obj.run"taskkill -f -im datacmp.exe"
msgbox"测试完毕!" & chr(13) & "共发现" & cnt & "处错误" ,,"结果"

程序CMP:

#include<bits/stdc++.h>
using namespace std;
char x[100],a1[100005][100],a2[100005][100];//可以根据需要修改数组大小 
int main()
{freopen("result.txt","w",stdout);freopen("out1.txt","r",stdin);int i=0,j=1,sum=0;while(gets(x)!=0){int len=strlen(x);if(x[len-1]==' ') x[len-1]='\0';//忽略行尾空格 i++;strcpy(a1[i],x);}freopen("out2.txt","r",stdin);i=0;while(gets(x)!=0){int len=strlen(x);if(x[len-1]==' ') x[len-1]='\0';//忽略行尾空格 i++;strcpy(a2[i],x);}for(j=1;j<=i;j++)if(strcmp(a1[j],a2[j])!=0){
//查看错误行内容 
//		printf("error on line %d:\n",j);
//		printf("\tcmp:%s\n\tstd:%s\n",a1[j],a2[j]);sum++;}cout<<sum;return 0;
}

同样,程序A用记事本打开,保存为xxx.vbs,程序CMP保存为datacmp.cpp,程序A注释比较详尽,就不多讲了

附:

友情提示:考试时需要自己写对拍器,因此建议读者记忆并能熟练编写数据生成器和对拍器(以下是最简单,也是最实用的版本

@echo off
for /l %%i in (1,1,10) do (randdata.execode1.exe < in.txt > out1.txtcode2.exe < in.txt > out2.txtfc out1.txt out2.txt > result.txtif errorlevel 1 echo %%i:WA! && pauseif not errorlevel 1 echo %%i:AC!
)
pause

 

 

效果图:

效果图(程序C):

程序A:

这篇关于信息学竞赛对拍器的设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/214867

相关文章

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。