linux下简单对拍shell脚本

1.数据创建

datamaker.cpp:

#include 

using namespace std;

typedef long long int ll;

ll rget( ll a, ll b)
{
	return (rand() % (b - a) ) + a;//产生范围为 [a, b]的随机数
}

int main()
{
	srand( (unsigned int) time( NULL ));//以时间为随机种子
	ll T = 100;
	cout << T << endl;//T組样例
	while(T--)
	{
            //数据生成部分具体根据题意写

        }
    return 0;
}

2.对拍脚本

#!/bin/bash
rm data
rm out1
rm out2

g++ datamaker.cpp -o datamaker

#运行datamaker,将测试数据存入data文件
./datamaker >> data

#将data文件中数据输入要测试的程序,再输出到文件out1、out2
cat data | ./Main >> out1
cat data | ./ans >> out2

#比较out1 out2
if diff out1 out2; then
printf "Accept\n"
else
echo WrongAnswer
fi

此脚本方便之处在于无需在源代码中添加freopen之类输入重定向即可实现数据输入输出,缺点暂时没发现。


////////////////////////////////////////////

上文脚本有缺陷... (脚本代码太low)

对拍脚本更新:

#!/bin/bash

./datamaker > data
./Main < data > out1
./Ans < data > out2
diff out1 out2

执行脚本后如果没输出,说明结果正确,如果有输出,输出表示的就是答案不匹配的行


你可能感兴趣的:(Ubuntu,Linux,杂,Contests)