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

对拍详细使用方法

对拍的作用

对于我们在学校OJ,cf,牛客…各种只提供少量测试数据的题目,常常交上代码常常超时,能写出正确的暴力代码而题目要求的时间复杂度更低。然而这时你写出了能通过样例且时间复杂度更低的代码,但交上去就是错误。
这时对拍会帮助你找到错误代码和正确暴力代码之间的区别。
对拍需要4个基本文件,数据产生代码暴力正确代码测试代码对拍代码,并把4个文件放在同一个文件夹里。

现在以最简单的 a + b a+b a+b 问题为例,输入两个数输出两数之和。

数据产生代码

我们找到错误代码和正确暴力代码之间的区别就需要跑数据产生结果,对比结果的差距:

// data.cpp
#include <bits/stdc++.h>
using namespace std; 
int main()
{struct _timeb T;_ftime(&T);srand(T.millitm);freopen("in.txt", "w", stdout); //生成 使两份代码 将要读入的数据int a = rand(), b = rand();cout<<a<<' '<<b<<'\n';
}

暴力正确代码

暴力正确代码文件产生暴力正确代码程序供对拍时使用

// baoli.cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{freopen("in.txt", "r", stdin);      //读入数据产生代码造出来的数据freopen("baoli.txt", "w", stdout); //输出暴力正确答案int a, b, ans = 0;cin>>a>>b;for (int i = 1; i <= a; i++)ans++;for (int i = 1; i <= b; i++)ans++;cout<<ans<<'\n';
}

测试代码

测试代码文件产生测试代码程序供对拍时使用

// std.cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{freopen("in.txt", "r", stdin);	//读入数据产生代码造出来的数据freopen("std.txt", "w", stdout);	//输出答案int a, b;cin>>a>>b;cout<<a+b<<'\n';
}

对拍代码

对拍代码调用 数据产生程序,测试程序,暴力正确程序,输出不正确的数据

// duipai.cpp
#include <iostream>
#include <cstdio>
#include <windows.h>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{int ok = 0;int n = 10;for (int i = 1; i <= n; ++i){system("data.exe");	//运行数据产生程序system("std.exe");	//运行测试程序double begin = clock();	//计时system("baoli.exe");	//运行暴力正确程序double end = clock();double t = (end - begin);if (system("fc std.txt baoli.txt")){int aa,bb;cin>>aa>>bb;cout<<aa<<' '<<bb<<"\n\n"; printf("测试点#%d Wrong Answer\n", i);}else if (t > 1000) //1秒{printf("测试点#%d Time Limited Exceeded 用时 %.0lfms\n", i, t);}else{printf("测试点#%d Accepted 用时%.0lfms\n", i, t);ok++; //AC数量+1}}printf("\n");double res = 100.0 * ok / n;printf("共 %d 组测试数据,AC数据 %d 组。 得分%.1lf。", n, ok, res);
}

对拍结果

按照上述步骤产生的运行结果如下:

修改data.cpp如下

#include <bits/stdc++.h>
using namespace std;
int main()
{freopen("in.txt", "r", stdin);	//读入数据产生代码造出来的数据freopen("std.txt", "w", stdout);	//输出答案int a, b;cin>>a>>b;int su = a + b;if(su%2)cout<<su<<'\n';elsecout<<su-1<<'\n';
}

运行结果如下:

http://www.lryc.cn/news/495100.html

相关文章:

  • Python面向对象编程与模块化设计练习
  • Linux系统硬件老化测试脚本:自动化负载与监控
  • 搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档
  • 排序学习整理(1)
  • 《深入探究 Java 中的 boolean 类型》
  • 智享 AI 自动无人直播系统:打破地域与时间枷锁中小微企业的营销破局利器
  • 接口测试工具:reqable
  • 同时多平台git配置:GitHub和Gitee生成不同的SSH Key
  • 刷题计划day24 回溯(三)【复原 IP 地址】【子集】【子集 II】
  • 从“找三角形”讲“等腰三角形”
  • Java中的泛型方法和泛型类
  • springboot学习-spring-boot-data-jdbc分页/排序/多表查询的例子
  • 通信与网络基础
  • 【3.存储系统】综合大题
  • 【Linux】【字符设备驱动】深入解析
  • 【JavaEE】多线程(2)
  • mac下Gpt Chrome升级成GptBrowser书签和保存的密码恢复
  • 使用Grafana K6来测测你的系统负载能力
  • 【论文复现】基于BERT的语义分析实现
  • CTF-RE: STL逆向 [NewStarCTF 2023 公开赛道 STL] WP
  • 实习冲刺第三十六天
  • 【Zemax光学设计实训三】---激光缩束镜的设计优化
  • TCP/IP协议簇自学笔记
  • Spring Boot教程之十一:获取Request 请求 和 Put请求
  • 计算机网络(二)
  • 如何在Python中进行数学建模?
  • JavaSE——类与对象(5)
  • Istio笔记01--快速体验Istio
  • 面试小札:Java如何实现并发编程
  • java-a+b 开启java语法学习