ACM对拍程序

ACM对拍程序(Windows) 本程序为ACM对拍的经典代码,只需要把自己写的程序放在my.c程序中并编译为my.exe,再把标准示范程序放在std.c中,编译成std.exe,再运行duipai.cmd即可。如果遇到不同的输出,会自动停下。 立即下载

以2019杭电多校的一道题为例。
题目传送门
将正确程序还有WA的程序放在同一目录下(这两个程序按照一般写法即可),然后再写个样例随机生成代码。然后代码都要编译一下,生成对应的exe文件,因为对拍程序调用的是exe文件,所以源代码改了,还要重新编译一下,更新exe文件。然后新建txt,写入一下代码。然后将文件后缀改为.bat,一切就绪后就可以双击.bat文件,windows会调用cmd窗口,显示运行结果。
如果文件不再同一目录,只要在文件前面加上盘符/等信息(绝对路径),自行谷歌。
对拍核心代码:

:again
test > input.txt
permutation1 < input.txt > test_output.txt
permutation2n < input.txt > rt_output.txt
fc /N test_output.txt rt_output.txt
if not errorlevel 1 goto again
pause

代码解释:
代码第一行类似于定义一个函数。
第二行,可以类比c++中的输入输出流,就是讲test.exe运行出来的结果写入input.txt文件,这就类似输出流。
第三行的<类似于输入流,也就是将input.txt文件的数据读入permutation程序中作为输入数据。
第四行,调用windows比较函数fc, /N是这个函数的参数。自己可以上网查阅。
其他的就没什么注意得了。
样例随机生成代码:

#include <iostream> 
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <algorithm>
#include <windows.h>
using namespace std;
int fac(int x){
	int res = 1;
	for(int i = 2;i <= x;++i){
		res *= i;
		if(res > 1e4){
			return res;
		}
	}
	return res;
}
int main(){
	// freopen("food.in","w",stdout);
	// srand((unsigned)time(NULL));
	srand(time(0));
	int T = 0,n = 0,k = 0;
	int nT = 40,nn = 20,kk = 10000;
	T = rand() % nT + 1;
	printf("%d\n",T);
	while(T--){
		n = rand() % nn + 1;
		k = rand() % min(kk,fac(n)) + 1;
		printf("%d %d\n",n,k);
	}
	

	return 0;
}

AC代码:

#include<bits/stdc++.h>
#define per(i,a,b) for(int i = (a);i <= (b);++i)
#define rep(i,a,b) for(int i = (a);i >= (b);--i)
using namespace std;
const int maxn = 20 + 10;
int n = 0,k = 0,cnt = 0;
int ans[maxn];
bool vis[maxn];
void init(){
	cnt = 0;
	per(i,1,n){
		vis[i] = false;
	}
}
bool dfs(int depth,int minv,int maxv){
	if(depth > n){
		++cnt;
		if(cnt == k){
			per(i,1,n){
				printf("%d%c",ans[i] - minv + 1,i == n ? '\n' : ' ');
			}
			return true;//如果找到了答案就停止dfs
		}
		return false;//否则继续寻找
	}
	per(i,maxv - (n-1),minv + (n-1)){
		if(vis[i]){
			continue;
		}
		ans[depth] = i;
		vis[i] = true;
		if(dfs(depth+1,min(minv,i),max(maxv,i))){
			vis[i] = false;
			return true;//如果找到了答案就停止dfs,退出循环,不在dfs该节点的其他子树
		}
		vis[i] = false;
	}
	return false;
}
int main(){
	int T = 0;
	scanf("%d",&T);
	while(T--){
		scanf("%d %d",&n,&k);
		init();
		ans[1] = n;
		vis[ans[1]] = true;
		dfs(2,n,n);
	}
	return 0;
}

WA的代码:

#include<bits/stdc++.h>
#define per(i,a,b) for(int i = (a);i <= (b);++i)
#define rep(i,a,b) for(int i = (a);i >= (b);--i)
using namespace std;
typedef long long LL;
#define INF 1e9
const int maxn = 30;
int n = 0,k = 0;
vector<int> ans;
bool vis[maxn];
int fac(int x){
	int res = 1;
	per(i,2,x){
		res *= i;
		if(res > 1e4){
			break;
		}
	}
	return res;
}
void init(){
	ans.clear();
	per(i,1,n){
		vis[i] = false;
	}
}
void solve(){
	int num = fac(n-1);
	ans.push_back(0);
	ans[0] = n+1 - ceil(k*1.0/num);
	vis[ans[0]] = true;
	if(k % num == 0){
		k = num;
	}else{
		k %= num;
	}
	rep(i,n-2,1){
		num = fac(i);
		int pos = ceil(k*1.0/num);
		int cnt = 0,las = -1;
		bool fg = true;
		per(i,1,n){
			if(!vis[i]){
				++cnt;
				las = i;
				if(cnt == pos){
					ans.push_back(i);
					fg = false;
					vis[i] = true;
					break;
				}
			}
		}
		if(fg){
			ans.push_back(las);
			vis[las] = true;
		}
		if(k % num == 0){
			k = num;
		}else{
			k %= num;
		}
	}
	per(i,1,n){
		if(!vis[i]){
			ans.push_back(i);
			break;
		}
	}
	per(i,0,n-1){
		printf("%d%c",ans[i],i == n-1 ? '\n' : ' ');
	}
	// printf("fnadsuiofhasofiaj\n");
}
int main(){
	// freopen("food.in","r",stdin);
	// freopen("food.out","w",stdout);
	int T = 0;
	scanf("%d",&T);
	while(T--){
		scanf("%d %d",&n,&k);
		init();
		solve();
	}


	return 0;
}
ACM/OI - 对拍程序模板 ACM/OI - 对拍程序模板,文章链接:https://blog.youkuaiyun.com/Dream_Weave/article/details/81385828 立即下载

相关推荐

ACM/OI 对拍程序的写法

版权声明:本文为博主原创文章,转载请务必注明出处。 https://blog.youkuaiyun.com/wlx65003/article/details/511

ACM模板 - 程序对拍

一、概念: 首先对拍程序,顾名思义,一个输入给两个程序分别跑一遍,看看对不对的上。对拍三步曲: 生成一组输入数据; 把这组数据分别给两个程序运行,并生成两组输出数据; 比较两组输出数据。 二、教程: my.cpp:自己错误的代码,编译成my.exe; std.cpp:标准代码(即:标程),编译成std.exe; rand.cpp:数据生成器,根据具体情况具体修改输入数据格式(数......

932

弹簧管压力表设计报告

精密机械课程设计 弹簧管压力表设计报告 2020年5月1日 目 录 第一章 设计任务概述... 3 1.1 课程设计目的... 3 1.2 设计任务... 3 1.3 技术指标... 3 第二章 压力表概述... 4 2.1 机械式压力表的组成部分... 4 2.2 工作原理... 4 第三章 压力表设计... 5 3.1 弹簧管参数设计... 5 3.2 曲柄滑块机构设计... ...

weixin_42163746的博客 6448

ACM对拍程序的写法(Linux和Windows)

Linux系统下 现在我用正确的快速排序来对拍写的归并排序,先写好两个文件,如下 //文件名:My.cpp #include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; vector<int> a(n); vecto

ComingLiu的博客 552

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型

本文提供了一份快速部署指南,教你如何在5分钟内利用FunASR工具包在本地电脑上启动达摩院Paraformer语音识别模型。Paraformer作为一款非自回归端到端模型,以其推理速度快、识别精度高的特点,结合FunASR的一键式模型加载和统一API,让开发者能轻松构建本地语音识别系统,极大降低了前沿AI技术的应用门槛。

q9w8e7r6t5的博客 604

STM32F407 CubeMX UART DMA高效解析BNO085九轴数据

本文详细介绍了如何在STM32F407平台上使用CubeMX配置UART和DMA高效解析BNO085九轴传感器数据。通过DMA循环接收机制实现低CPU占用的实时数据采集,并分享数据解析技巧、错误处理及实战调试经验,为嵌入式开发者提供完整解决方案。

o4p5q6r7s的博客 234

ACM之【对拍】

首先,我们要了解何为对拍。 对拍其实就是我们弄一个随机的种子让其生成很多的数据,让两份程序跑,看跑出来的答案是不是都是一样的。 对拍经常使用的场景: 平时训练中,我们写的程序有问题但是不知道是哪些数据导致错误的。 可以从网上复制一份别人正确的代码。用种子生成数据,将我们自己的代码和别人的代码对拍找到错误的数据点。 比赛中可以用对拍检测代码的正确性。可以自己写一个暴力的代码和自己优化后的代码对拍,看优化后的代码是不是正确的。 随机种子的生成,根据问题也是对应很多不同的模板。这些可以自己写一个,或者网上找人

辉小歌的博客 1720

嵌入式面试|MCU+RTOS技术栈——面试八股文整理3:STM32

stm32

weixin_44800059的博客 1900

ACM竞赛如何写好对拍,从而减少罚时

对拍 1.准备工作: 新建一个文件夹,里面新建: std.cpp(用来存你要提交的代码) 、 baoli.cpp(用来存正确的暴力代码)、 check.txt(用来存检验代码)、 data.cpp(用来生成数据)、 1.txt(用来存证明你即将提交代码错误的数据)、 2.txt(用来存被检验代码运行后的结果)、 3.txt(用来存暴力运行出的正确结果)。 2.检验代码: g++ mkd.cpp -o mkd -g g++ std.cpp -o std -g g++ baoli.cpp -o baoli -g

apple_52197802的博客 810

蓝桥杯单片机开发实战:Keil环境配置与IAP15F2K61S2头文件设置详解

本文详细讲解了为蓝桥杯单片机竞赛配置Keil开发环境的关键步骤,重点解析了IAP15F2K61S2专用头文件的获取与设置方法。通过使用STC-ISP工具添加芯片型号和头文件,确保编译器能正确识别寄存器,是成功进行单片机编程和竞赛备赛的基础。文中还提供了从软件安装、工程创建到常见问题排查的完整实战指南。

soda5的博客 886

保姆级教程:从Salmon输出到DESeq2,搞定RNA-seq表达矩阵标准化与下游分析准备

本文提供从Salmon输出到DESeq2标准化的RNA-seq数据分析全流程指南,详细解析表达矩阵构建、标准化方法选择及下游分析准备。重点介绍如何将Salmon定量结果转换为DESeq2兼容格式,包括TPM与原始计数的处理技巧,以及常见问题排查方法,帮助研究人员高效完成RNA-seq数据分析。

weixin_42699679的博客 303

acm 对拍程序 步骤展示

在打acm比赛时,如果一个程序实在不知道错在哪,而剩下时间还挺充足,对拍是一个很好的手段,下面就展示如何使用对拍。 我y以uva为例子 第一步:在e盘新建一个“duipai”文件夹,(在哪个盘哪个文件夹里将新建,这个无所谓,看个人方便) 接下来我要生成个测试数据,上代码 #include #include #include #include int main(voi

zyh 9738

SAE ARP 4761A内容详解

SAE ARP 4761A主要为民用航空系统及设备的安全评估提供指南,帮助制造商和设计者满足FAA的FAR 25.1309等适航标准的要求。该文档旨在为航空器和航空系统设计中涉及的安全评估流程提供一个结构化的框架,并结合一系列工具和方法,如故障树分析(FTA)、依赖图分析(DD)、马尔可夫分析(MA)等,来系统地评估潜在的安全隐患。这一标准不仅适用于大型航空器的设计和评估,还可以应用于各种类型的飞行系统,如无人驾驶飞行器(UAV)和新型的电动垂直起降飞机(eVTOL)。

qq_41854911的博客 3147

ACM 对拍程序

使用方法 新建四个cpp文件 分别是 zi.cpp baoli.cpp data.cpp duipai.cpp 分别写下 自己的代码,暴力保证100%正确的代码,生成本题的数据,对拍程序 先编译前三个cpp文件生成对应的exe文件后,运行 duipai.cpp 这个代码即可进行对拍 参考博客: 大佬1 大佬2 zj.cpp(zj 自己的code不保证 100%正确) #include<iostream> using namespace std; int main() { int

qq_43750980的博客 286

OceanSim: 基于Isaac Sim GPU 加速水下机器人感知仿真框架

OceanSim 采用先进的基于物理的渲染技术,对水下视觉和声学传感器进行精确建模。与其他模拟引擎相比,OceanSim 的渲染速度要快得多。作为 NVIDIA Issac Sim 的扩展,OceanSim 采用了多功能设计。通过融入快速发展的 NVIDIA Omniverse 生态系统,我们的模拟器自然而然地在机器人学习和水下机器人技术之间架起了一座桥梁,从而促进了水下应用中体现型人工智能技术的开发和部署。OceanSim 将以开放源码的方式提供,使研究界能够以合作的模式作出贡献。

机器人控制与仿真应用 2049

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ACM对拍程序过程

ACM对拍程序过程。。。 一、用随机程序生成符合题目的输入数据文件名为in.txt 如何产生随机数: http://www.cnblogs.com/lvsi/archive/2011/04/21/2024079.html 二、用AC的程序和你的程序分别跑数据in.txt AC程序生成out1.txt  你的程序生成out2.txt 在生成输出数据的时候最好把

zshdove 947

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Windows 下的对拍程序(ACM等比赛适用)

参考出处:ACM/OI 对拍程序的写法 对拍程序思路: 生成测试数据 将测试数据分别输入到标称与自己的代码,并获得输出 对比两个输出是否相同 一般呢,我们会写个 rand.cpp 来生成测试数据,即每运行一次rand.exe就会生成一组测试数据。接下来呢,假设标称文件是std.exe,而自己写的代码为my.exe,我们需要做的是将rand.exe生成的数据保存到data.in文件中,然...

帅比王的博客 2096

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 利用Dijikstra最短路特定写法求次短路,DP
下一篇: 2019暑假杭电多校第6场签到题-1008-TDL
Mavis code
博客等级 码龄9年 13粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值