算法:数据生成器&对拍

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.exestd.exedata.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;
}
posted @   e_zhe  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
主题色彩