自动AC机

Posted qywyt

tags:

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

  首先,本博客只供娱乐,请不要用于大型考试中.如果被告了也不要怪我.

  考虑评测的原理:10组或20组或更多的数据放在data文件夹里,lemon每次用一个.in文件读入到你的程序里,你的程序会跑出来答案到.out里,lemon再与data里的.out文件进行比对.

  而这个可能称得上算法的东西主要是通过枚举找到当前测试的是哪一组数据,然后去data文件夹里找到.out文件并读入答案,输出答案.这样当然是对的.

  首先深刻理解freopen这个函数:

freopen("123.in","r",stdin);
freopen(const char*, const char*, FILE*) 

 

  前两个都带*,说明是指针啊.也就是说我们平常用的"123.in"都是文件地址的指针.(最后一个大概是说明类型的,先不管).

  那有没有想过为什么可以直接打开这个叫123.in的文件呢?因为它与.cpp在同一个文件夹里.那么现在如何打开指定位置的文件呢?给出指定的文件位置即可.比如这个123.in可以这样写.

freopen("C:\\Users\\Administrator\\Desktop\\当前代码\\123\\123.in","r",stdin);

  这里都是两个"\\",原因在于,别的没有问题,只有C:后如果用的话过不了编译,不知道为什么.

  这样的话就可以开始写题了.

  昨天做了一道名为ball的题,以此为例说明一下.

  首先还是正经的把数据读入进来.

  技术图片

  然后要清楚in文件的命名规则.在评测机的文件地址是什么,命名方式是1.in还是01.in?

  大多是情况下是不清楚的,我们需要一个函数istream,长得很像某个头文件对吧.这个函数需要头文件

#include<fstream>

  然后我们来判断你要打开的文件是否存在,否则会导致程序运行时错误.

  技术图片

 

 

 

  暂时没有什么好的方法,只好复制个30次以确保01-09,1-9,10-20都能试一边.

  1.不用fclose好像也没有问题.

  2.init()里一定要把所有的数据都输入进来.

  3.好像不能用fread快读,用getchar也不差啥.

  4.交互题就算了吧?

以上是关于自动AC机的主要内容,如果未能解决你的问题,请参考以下文章

POJ2778DNA Sequence(AC自动机)

POJ3691DNA repair(AC自动机,DP)

HDU4057 Rescue the Rabbit(AC自动机+状压DP)

Codeforces 86C Genetic engineering(AC自动机+DP)

关于自动AC机

POJ1699 Best Sequence(AC自动机+状压DP)