算法:数据生成器&对拍
0xFF 背景#
为整治机房乱象,传奇 SPJ 王 Y 老师制订了以下规则:
凡被我抓到睡觉、打游戏、看小说者,一律
砍头造数据。
这下,作为睡神、游戏爱好者和资深书迷的 clx 一下慌了神。
0x00 数据生成器#
#include<bits/stdc++.h>
#define i64 long long
using namespace std;
char num[3];
void changenum(int n) {
num[0]=num[1]=num[2]='\0';
if(n<10)num[0]=n+'0';
else num[0]=n/10+'0',num[1]=n%10+'0';
return;
}
i64 random(int n){return rand()*1ll*rand()%n;}//生成一个0~n-1的整数
/*
把标程里面(结构、类、函数等的声明和定义)放在这里
*/
void prag_out(char *infile,char *outfile){
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
/*
把你标程main函数中的代码放在这里(不加 return 0)
请使用scanf/printf
*/
return;
}
void prag_in(char *file,int p){
freopen(file,"w",stdout);
/*
数据生成器放在这里
请使用scanf/printf
*/
return;
}
int main() {
srand((unsigned)time(0));
int datanum=10;//数据组数
char Fname1[20],Fname2[20];
for(int i=1;i<=datanum;i++){
//把data改为想要的文件名
strcpy(Fname1,"data"),strcpy(Fname2,"data");
changenum(i);
strcat(Fname1,num),strcat(Fname2,num);
strcat(Fname1,".in "),strcat(Fname2,".out ");
prag_in(Fname1,i);
prag_out(Fname1,Fname2);
}
return 0;
}
0x10 对拍#
数据生成器都能写出来,对拍还有问题吗?
使用方法:先写出暴力程序、正解和数据生成器,把他们放在一个文件夹里,分别编译三个程序,产生 baoli.exe
、std.exe
、data.exe
,然后写出下面的对拍程序,运行对拍程序即可。
朴素版(适用于考场):
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
while(true){
system("data.exe");
system("baoli.exe");
system("std.exe");
if(system("fc std.txt baoli.txt"))break;
}
return 0;
}
豪华版(太难了,考场上不好写):
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(){
int cnt=0;
for(int i=1;i<=50;++i){
system("data.exe");
system("std.exe");
double begin=clock();
system("baoli.exe");
double end=clock();
double t=end-begin+1;
if(system("fc std.txt baoli.txt")){
printf("test #%d\n",i);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
printf("Wrong Answer\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
else if(t>1000){
printf("test #%d\n",i);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
printf("Time Limited Exceeded");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
printf("time: %.0lfms\n",t);
}
else{
printf("test #%d\n",i);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
printf("Accepted");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
printf("time: %.0lfms\n",t);
cnt++;
}
}
return 0;
}
分类:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步