很多同学都好奇为什么我们的OJ能够帮老师批改题目,当然很多同学也明白了,其实就是运行这个程序是试着看看能不能老师制作的数据进行和答案匹配!
这里我们就不得不用随机数来制作数据,例如a=rand();这个a其实是固定的的,第一次产生的a都是同一个,而且这个a的大小只到3万多一点;
那么我们在制作数据的时候,有些特殊数据是特别难做的,例如一棵树或者是一个图,我们还得保证图和树的连通性。
现在我们用静态随机数来生成一棵树,每个节点的儿子不超过4个,那么我们可以用rand%4+1来表示儿子的大小。
我们利用下面的函数来随机一个节点的儿子数量!
int getnum() { unsigned x = 233,t; x ^= x << 13; x ^= x >> 17; x ^= x << 5; t = x % 4 + 1; return t; }
然后依次排入还能剩下的节点,一旦节点达到节点总数,造树完毕!
例如输入10,就会产生如下一棵树
输出的就是:
1 1 1 1 2 2 2 2 3
一个数字n,表示一共有的节点数量
输出n-1个数字,第i个数字里面输出k,表示i是k的儿子
10
1 1 1 1 2 2 2 2 3
说明:
利用静态随机数,大家生成的树是一样的,前提条件是大家的取模公式得一致才可以;
int getnum() { unsigned x = 233,t; x ^= x << 13; x ^= x >> 17; x ^= x << 5; t = x % 4 + 1; return t; }
这里我们生成随机数的公式固定成这个,这样子大家产生的数据就一样了
30%数据,n<=20
60%数据,n<=1000
100%数据,n<=100000