在Linux or Windows中如何优雅的写出对拍

在Linux or Windows中如何优雅的写出对拍

  • 一、前言
  • 二、结论
    • 1、对拍
  • 三、对拍详解
    • 1、什么是对拍呢?🧐
    • 2、对拍的组成部分
    • 3、输入数据生成
    • 4、对拍程序
    • 5、操作流程
  • 四、最后

一、前言

网上的对拍程序层出不穷,大多LinuxWindows中的对拍程序都是独立开的(在Windows中用.bat,在Linux中用.sh),那么有没有一种方法使之统一起来呢?🤔答案是有的!🥳

二、结论

对于有基础的同学直接看结论就行了。用Cppsystem()函数调用系统命令,来写对拍程序就可以了。其中记住以下几点就行

  1. Windows中可执行文件后缀名为.exe,Linux中可执行文件后缀名为.out。在对应系统生成对应程序。(这个应该都没问题把🧐)

  2. 对拍的核心就是判断绝对AC的程序与现有程序输出是否一致

    • Linux中使用diff
    • Windows中使用fc

1、对拍

Windows

#include<bits/stdc++.h>
using namespace std;

void slove() {
    while (true) {
        system("gen.exe > tmp.in");
        system("F.exe < tmp.in > tmp.out");
        system("F_AC.exe < tmp.in > tmp_AC.out");
        if (system("fc tmp.out tmp_AC.out")) {
            cout << "WA" << endl;
            return;
        } else cout << "AC" << endl;
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}

Linux

#include<bits/stdc++.h>
using namespace std;

void slove() {
    while (true) {
        system("gen.out > tmp.in");
        system("F.out < tmp.in > tmp.out");
        system("F_AC.out < tmp.in > tmp_AC.out");
        if (system("diff tmp.out tmp_AC.out")) {
            cout << "WA" << endl;
            return;
        } else cout << "AC" << endl;
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}

三、对拍详解

1、什么是对拍呢?🧐

判断绝对AC的程序与现有程序输出是否一致

简单来说,用代码生成 输入数据,再把生成的输入数据分别喂给已知能AC的程序和不确定能AC的程序,找出让这两个程序输出不一致的 输入数据

2、对拍的组成部分

对拍的组成部分

3、输入数据生成

目标:用程序随机自动生成输入数据
做法:用srand() + time()函数生成随机数
注意的点

  • Windowssrand()随机数的范围为0 ~ 32767
  • Linuxsrand()随机数的范围为0 ~ 2147483647
  • 哪我们如果数据范围在 long long怎么办呢?请看我封装的random()函数
#include <bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;

/*
// random ---> 生成数据范围在[l,r]的随机数
// Linux
ll random(int l, int r) { 
	return (ull)rand() * rand() % (r - l + 1) + l;
}
*/

// Windows
ll random(int l, int r) { 
	return (ull)rand() * rand() * rand() * rand() % (r - l + 1) + l;
}

void slove() {
    srand((unsigned)time(0));
    int n = random(1, 10);
	cout << n << endl;
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while (t--) slove();
    return 0;
}

4、对拍程序

基础知识

  • F.exe < tmp.in 代表输入重定向。它的作用是将一个文件的内容作为输入传递另一个程序。
  • Linux中的diffWindows中的fc,代表比较两个文件中的内容是否一致。

Windows

#include<bits/stdc++.h>
using namespace std;

void slove() {
    while (true) {
        system("gen.exe > tmp.in");
        system("F.exe < tmp.in > tmp.out");
        system("F_AC.exe < tmp.in > tmp_AC.out");
        if (system("fc tmp.out tmp_AC.out")) {
            cout << "WA" << endl;
            return;
        } else cout << "AC" << endl;
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}

Linux

#include<bits/stdc++.h>
using namespace std;

void slove() {
    while (true) {
        system("gen.out > tmp.in");
        system("F.out < tmp.in > tmp.out");
        system("F_AC.out < tmp.in > tmp_AC.out");
        if (system("diff tmp.out tmp_AC.out")) {
            cout << "WA" << endl;
            return;
        } else cout << "AC" << endl;
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}

5、操作流程

执行对拍程序就可以等待,程序停止,程序停止就代表程序找到WA的数据。这时我们只需要打开tmp.in查看这份数据就可以啦!🥳

四、最后

创作不易,如有帮助,点个赞鼓励一下吧!万分感谢!!!😭

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

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

相关文章

MySQL 函数与约束

MySQL 函数与约束 文章目录 MySQL 函数与约束1 函数1.1 字符串函数1.2 数值函数1.3 日期函数1.4 流程函数 2 约束2.1 概述2.2 约束演示2.3 外键约束2.4 删除/更新行为 1 函数 函数是指一段可以直接被另一程序调用的程序或代码。 1.1 字符串函数 MySQL中内置了很多字符串函数&…

LabVIEW开发实验室超导体电流特性测试系统

本系统旨在为学校实验室提供一个基于LabVIEW的超导体电流特性测试平台&#xff0c;通过精确测量超导体在不同温度和电流条件下的电学特性&#xff0c;帮助学生和研究人员深入理解超导体的物理性质。本文将从背景、目标、工作原理、使用方法、操作流程和注意事项等方面详细介绍该…

《python程序语言设计》2018版第5章第36题改造4.17 石头 剪刀 布某一方超过2次就结束。

代码编写记录 2024.05.04 05.36.01version 换一个什么数代替剪子 我先建立一个函数judgement condition 石头3 剪子2 布1 如何构建一个循环进行的架构&#xff0c;是我们最需要的想法 循环以什么条件开始呢 是小于2个还是大于2个。 guess_num random.randint(1, 3) computer…

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10]

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10] 原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x1f31f; 欢迎来…

浅解Reids持久化

Reids持久化 RDB redis的存储方式&#xff1a; rdb文件都是二进制&#xff0c;很小&#xff0c;里面存的是数据 实现方式 redis-cli链接到redis服务端 使用save命令 注&#xff1a;不推荐 因为save命令是直接写到磁盘里面&#xff0c;速度特别慢&#xff0c;一般都是redis…

创新案例|创新实时零售模式,千亿时尚巨头Shein的全球扩张之路

SHEIN&#xff0c;一家估值千亿美元的快时尚电商独角兽&#xff0c;是全球增长最快的服饰平台。它通过数据和平台的双轮驱动&#xff0c;构建了全新的“实时零售”模式&#xff0c;实现了数据与商业的紧密衔接。同时&#xff0c;通过领导力和组织能力建设&#xff0c;打造了独特…

Python 全栈体系【四阶】(五十八)

第五章 深度学习 十三、自然语言处理&#xff08;NLP&#xff09; 3. 文本表示 3.1 One-hot One-hot&#xff08;独热&#xff09;编码是一种最简单的文本表示方式。如果有一个大小为V的词表&#xff0c;对于第i个词 w i w_i wi​&#xff0c;可以用一个长度为V的向量来表示…

[C++数据结构之看懂就这一篇]图(上)

&#x1f4da;博客主页&#xff1a;Zhui_Yi_&#x1f50d;&#xff1a;上期回顾&#xff1a;JAVA面向对象&#xff08;上&#xff09;❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️&#x1f387;追当今朝…

C++面向对象程序设计 - 输入输出流进一步研究

在C中&#xff0c;输入输出流&#xff08;I/O&#xff09;是一个强大的特性&#xff0c;它允许程序与各种输入/输出设备&#xff08;如键盘、显示器、文件等&#xff09;进行交互。C标准库中的<iostream>头文件定义了基本的输入输出流类&#xff0c;如std::cin&#xff0…

从河流到空气,BL340工控机助力全面环保监测网络构建

在环保监测领域&#xff0c;智能化、高效率的监测手段正逐步成为守护绿水青山的新常态。其中&#xff0c;ARMxy工业计算机BL340凭借其强大的处理能力、高度的灵活性以及广泛的兼容性&#xff0c;在水质监测站、空气质量检测、噪音污染监控等多个环保应用场景中脱颖而出&#xf…

Apache ShardingSphere实战与核心源码剖析

Apache ShardingSphere实战与核心源码剖析 1.数据库架构演变与分库分表介绍 1.1 海量数据存储问题及解决方案 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。…

常见的api:BigDecima

一.计算中的小数 float和double占有的位置是有限的 二.BigDecima的作用 1.用于小数的精确计算 2.用来表示很大的小数 三.使用(传入小数) BigDecimal b1 new BigDecimal(0.01);BigDecimal b2 new BigDecimal(0.09);System.out.println(b1);System.out.println(b2); 不精确&…

creo学习一

设置好当前配置后&#xff0c;导出config配置文件&#xff0c;并覆盖掉此路径下的旧文件&#xff0c;使得新配置永久生效&#xff0c;这样每次打开软件都是新配置的设置&#xff1a; 系统颜色的导出&#xff1a; 打开版本的问题&#xff1a; 不能有弱尺寸&#xff1a; 注意&a…

搭建vauditdemo靶场mysql为NO问题

一、问题 在搭建vauditdemo时&#xff0c;遇到如下显示问题&#xff1a; mysql版本检测为NO 二、解决 查找该方面问题时&#xff0c;并没有找到解决方法 然后换mysql版本换了五六个也没有解决问题 问了AI后给的答复有一条为将mysql改为mysqli 修改保存后解决问题 步骤如…

280 基于matlab的摇号系统GUI界面仿真MATLAB程序

基于matlab的摇号系统GUI界面仿真MATLAB程序&#xff0c;输入总数量及摇号需求&#xff0c;进行随机性摇号&#xff0c;并对摇取的号码进行双重随机性数据检测&#xff0c;确定是否符合要求。程序已调通&#xff0c;可直接运行。 280 GUI人机交互 摇号系统GUI界面仿真 - 小红书…

RocketMq详解:二、SpringBoot集成RocketMq

在上一章中我们对Rocket的基础知识、特性以及四大核心组件进行了详细的介绍&#xff0c;本章带着大家一起去在项目中具体的进行应用&#xff0c;并设计将其作为一个工具包只提供消息的分发服务和业务模块进行解耦 在进行本章的学习之前&#xff0c;需要确保你的可以正常启动和…

cnvd_2015_07557-redis未授权访问rce漏洞复现-vulfocus复现

1.复现环境与工具 环境是在vulfocus上面 工具&#xff1a;GitHub - vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module 参考攻击使用方式与原理&#xff1a;https://vulhub.org/#/environments/redis/4-unacc/ 2.复现 需要一个外网的服务器做&…

Docker Swarm持久化

Docker Swarm持久化 1 简介 Docker Swarm持久化有bind、volume和NFS三种方式&#xff0c;bind和volume两种方式适合挂载单个宿主机&#xff0c;不适合集群&#xff1b;NFS适合集群服务&#xff0c;但需要安装NFS系统。 注意&#xff1a;Docker Swarm需要先安装集群。 由Doc…

AI作画工具介绍

目录 1.概述 2.Stable Diffusion 2.1.诞生背景 2.2.版本历史 2.3.优点 2.4.缺点 2.5.应用场景 2.6.未来展望 3.Midjourney 3.1.诞生背景 3.2.版本历史 3.3.优点 3.4.缺点 3.5.应用场景 3.6.未来展望 4.总结 1.概述 AI作画工具是一种运用人工智能技术&#xff…