对拍程序

Posted yzher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对拍程序相关的知识,希望对你有一定的参考价值。

emmm

更一下对拍吧……

毕竟对拍可以让暴力价值提高不少

@echo off  
:loop  
    rand.exe > cx.in
    cx1.exe < cx.in > cx1.out
    cx0.exe < cx.in > cx0.out
    fc cx1.out cx0.out 
if not errorlevel 1 goto loop  
pause
goto loop

就这个意思   cx1  cx2 一个你的技巧算法,一个暴力之类的……

rand是随机数据,我习惯用pascal编写……

存成 .bat 文件,放在一个文件夹中

举个栗子吧:
普通的线性素数筛法和一个个判断

洛谷模板题

技术分享图片

c++线筛:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
bool bl[10000100];
int ss[10000100];
int t=0,n,m;
void seive(int n)
{
    memset(bl,true,sizeof(bl));
    bl[0]=false;
    bl[1]=false;
    for (int i = 2; i <= n; i++)
    {
        if (bl[i]) ss[++t]=i;
        for (int j = 1; j <= t && i*ss[j] <= n;j++)
        {
            bl[i*ss[j]]=false;
            if (!(i % ss[j])) break;
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin >> n >> m;
    seive (n);
    for (int i = 1; i <= m; i++)
    {
        int x;
        cin >> x;
        if (bl[x]) cout << "Yes" << endl;
        else cout << "No" << endl; 
    }
    return 0;
}

c++暴力:

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int n,m;
bool is(int x)
{
    for (int i = 2; i <= sqrt(x); i++)
        if (x%i==0) return false;
    return true;
}
int main()
{
    ios::sync_with_stdio(false);
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int x;
        cin >> x;
        if (is(x)) cout << "Yes" << endl;
        else cout << "No" << endl; 
    }
    return 0;
}

pascal随机:

var
  n,m,i:longint;
begin
  randomize;
  n:=random(1000)+10;
  m:=random(100)+5;
  writeln(n, ,m);
  for i:=1 to m do
  writeln(random(n-1)+1);
end. 

然后放进一个文件夹中:

技术分享图片

运行后就可以看见如下结果:

技术分享图片

但如果程序不同,就会这样:

技术分享图片

就这样,对拍结束了……

注意:

  • 保证暴力的正确性!!!很重要
  • 不要加文件!!!不要对拍后忘记加回文件!!!
  • 对拍后看看.in 和 .out 如果是空的证明程序错了
  • 时间!!!rand文件不要开太大,否则超过暴力时限后会极慢……不要用最后几分钟对拍,保证时间游刃有余。

以上是关于对拍程序的主要内容,如果未能解决你的问题,请参考以下文章

对拍(windows环境)

简易对拍器

Windows系统对拍程序

对拍程序

对拍——我认为的最简写法

使用bat打的对拍程序