Linux下对拍模版

Windows版本传送门:http://www.cnblogs.com/shamman/p/7336917.html

捣鼓了半天NOILinux,算是差不多搞明白了,以后大概会用NOILinux刷题多一些吧。

数据生成器(与Windows下写法无异)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define random(a,b) ((a)+rand()%((b)-(a)+1))
 4
 5 stringstream ss;
 6
 7 int main( int argc, char *argv[] )
 8 {
 9     int seed=time(NULL);
10     if(argc)//如果有参数
11     {
12         ss.clear();
13         ss<<argv[1];
14         ss>>seed;//把参数转换成整数赋值给seed
15     }
16     srand(seed);
17     //以上为随机数初始化,请勿修改
18     //random(a,b)生成[a,b]的随机整数
19
20     //以下写你自己的数据生成代码,根据题意写
21     printf("1\n");
22     int n=10;
23     int m=random(1,20);
24     printf("%d %d\n",n,m);
25     for(int i=0 ; i<n ; ++i)
26     {
27         printf(" %d ",random(0,m));
28     }
29     printf("\n");
30     return 0;
31 }

对拍程序

 1 #!/bin/bash
 2 while true; do
 3     ./rand $RANDOM > data.txt //数据生成器
 4     ./std < data.txt > out1.txt //正解
 5     ./my < data.txt > out2.txt //你写的正确性未知的程序
 6     if diff out1.txt out2.txt; then
 7         echo AC
 8     else
 9         echo WA
10         exit 0
11     fi
12 done

保存为.sh后缀的文件(这里以test.sh为例),然后把三个程序放在一个目录下。

用的时候先Ctrl+Alt+T打开终端,然后输入cd 你的文件目录(右键文件属性可以看到路径,全部输进去,大小写也要完全一样,注意这里要全部是英文路径,不然无法识别),回车。

再输入sh sh.test,回车。

这个时候对拍就开始跑了,如果两个程序的输出没差别的话你会看到很多很多行AC,检测到差别时对拍会停下来,你可以在终端看到两个程序分别输出的内容,在目录下的data.in里可以找到出错的这组数据。

对拍还是很实用的,建议背下来,到了考场等密码的时候可以先把对拍敲出来,每道题先写暴力再想正解,然后再拍一拍就稳多了。

时间: 2024-12-27 00:05:38

Linux下对拍模版的相关文章

Linux下对拍脚本与随机数生成器

对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > 1.in #运行数据生成器,将数据输出到1.in ./std < 1.in > out1 #std是标准(暴力)程序 ./now < 1.in > out2 #now是现在要被测的程序 if diff -w out1 out2; then #比较,-w 是忽略行末空格 echo AC #如果一样就输出AC else echo WA cat

Linux下对拍脚本

使用说明:        1. 被测代码.正确代码.生成器代码均使用文件输入输出: 2. 对拍前会清屏,请注意:        3. 输出文件的文件名请和代码文件名保持一致:        4. 若无限循环输出AC未停,则很可能正确:输出WA并跳出那就WA了:        5. WA时输出两份答案,被测在前,AC在后:        6. enjoy coding: 代码: 1 #!/bin/bash 2 3 clear; # 清屏 4 read -p "输入被测源代码名称(不含拓展名):&q

[科技]NOI Linux下的对拍程序

我们知道,在$Windows$环境下用$cmd$里的$FC$函数实现对拍(放到一个目录下): #include <cstdlib> int main(){ while(true){ system("make.exe >make.txt"); system("Force.exe <make.txt> Force.txt"); system("need.exe <make.txt> need.txt"); i

windows和linux下如何对拍

对拍是各种计算机考试检查时必备工具,实际上十分强大,只要你的暴力没有写错就没有问题. 对拍的意思:(怎么有点语文课的意思雾) 对:看见'对'就可以知道有两个. 拍:就是把两个程序结果拍在一起,对照(有点牵强). 实践 由于Windows和Linux系统不同,平常大多数人都用Windows,而在noi系列赛事中都采用Linux系统. Windows 就以a+b为例吧. 首先摆一个可能是正解的东西. 这个代码文件名:1.cpp #include<cstdio> #include<window

Linux下FTP虚拟账户配置

参考模版/usr/share/doc/vsftpd-2.0.5/EXAMPLE/VIRTUAL_USERS) 1.创建虚拟账户 [[email protected] ~]#yum install db4-utils [[email protected] ~]#vim /etc/vsftpd/vlogin tomcat #账户名称 123456 #密码 jerry #账户名称 654321 #密码 [[email protected] ~]#db_load -T -t hash -f /etc/v

Linux下的mysql两大实战:部署Ucenter和Ucenter-home论坛

Linux下的mysql两大实战:部署Ucenter和Ucenter-home论坛 实验目标 实战:搭建Ucenter论坛 搭建Ucenter-home网站 实验环境 LAMP环境搭建 服务端:xuegod63.cn   IP:192.168.1.63 客户端:xuegod64.cn   IP:192.168.1.64 实验步骤   ---搭建LAMP环境部署Ucenter和Ucenter-home网站,搭建一个类人人网的社交网站      实验概述 UCenter 用户中心,实现用户的统一登录

Linux下编程

Linux用不惯的很大一个原因是终端下编译.主要是平时Win下也不怎么用终端. 最近刚刚发现Gedit可以添加外部工具,运行Shell命令. 这不就行了,我TM之前怎么没想到呢. 从终端中狂按Up-Down解脱了. 然后Win下Notepad++ Linux下Gedit 基本一样嘛. (gedit工具)一键编译运行 #!/bin/bash dir=$GEDIT_CURRENT_DOCUMENT_DIR fullname=$GEDIT_CURRENT_DOCUMENT_NAME name=`ech

C语言高级应用---操作linux下V4L2摄像头应用程序

我们都知道,想要驱动linux下的摄像头,其实很简单,照着V4L2的手册一步步来写,很快就可以写出来,但是在写之前我们要注意改变系统的一些配置,使系统支持framebuffer,在dev下产生fb0这样的节点,这样我们才能在linux系统上操作Camera摄像头,framebuffer在之前的博文已经有说过了,这里就不再提了. 有需要了解framebuffer的那么请点击:http://baike.baidu.com/view/3351639.htm 最重要的,我们需要改一个脚本,在/dev/g

[转]Linux下的链接脚本基础

[转]http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml 1. 前言 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局. 但你也可以用连接命令做一些其他事情.连接器有个默认的内置连接脚本, 可用ld –verbose查看. 连接选项-r和-N可以影响默