这篇文章是对以前 OI生成随机题目数据,测试点集锦【C++】【有待完善】 的一个补充:
正文
在那一篇文章中,我出数据用的是 stand
和rand
的随机数,但是这样不仅有时较大数据出不出来(当时我的rand
只能产生0~30000左右的数据)很麻烦,所以今天给大家说一种非常good的随机数;
这个随机数我叫它mt19937
,是一个c++自带的随机数,直接用万能头文件即可运行,其定义方式如下:
random_device R;
mt19937 G(R());
(编译错误可能是版本不对,这里以CCF的编译环境为准)
注意定义不能随意修改,想要调用它产生随机数也很简单,只需要一个函数:
uniform_int_distribution<int>(l,r)(G);
其中int
部分是指产生随机数的类型;
l
,
r
l,r
l,r 是产生随机数的范围区间
[
l
,
r
]
[l,r]
[l,r];
这个东西就比rand()强多了,也不需要设置种子,除了出数据,还可以应用在树堆,平衡树等数据结构上,下面给出一般写法;
一般写法
random_device R;
mt19937 G(R());
int rd(int l,int r){
return uniform_int_distribution<int>(l,r)(G);
}
这其中如有什么是蒟蒻讲的不对的,欢迎评论改正,补充!