单点时限: 2.0 sec
内存限制: 512 MB
如何生成一个合法的出栈顺序?
这个问题看上去很抽象,我来给大家解释一下:在EOJ里面你们会看到一道题目叫“1.3 铁路调度”,为了给大家构造测试数据,我需要生成若干合法的出栈顺序,若干不合法的出栈顺序,用怎么样的一个算法可是使得生成出来的数据在尽可能多样的条件下,部分数据是合法的,部分数据是非法的。说的更明白一点的话:因为我们知道绝大多数的出栈顺序都是非法的,如果直接随机生成的话可能导致绝大多数数据都是非法的,甚至可能直接输出no就可以通过(大家可以自己体验一下),如果精心构造每一个样例又很浪费时间,所以我们需要一个算法来生成一个很强的数据。
为了通过这道题目,对于输出的数据有以下要求:
yes
,即生成的数据具有一定的多样性。或者,换句话说你可以:
其实如果大家了解什么是黑盒攻击的话,或许能够更好的理解题目的意思!
(Special Judge)
两个数$n,m$,$n$表示数据组数,$m$表示每组测试数据的出栈序列的长度。
只有一个测试数据:$ n=80,m=1000 $。
总共$n$行,每行$m$个数,每行的$m + 1$个数,其中第1个数是$m$,从第$2$个数到第$m+1$个数是$1$到$m$的一个排列。
4 4
4 1 2 3 4 4 4 3 2 1 4 4 3 1 2 4 3 4 1 2
c++中在cstdlib中有rand()函数生成一个随机数,使用srand(time(NULL));生成随机数种子。