随机造 01 序列

学术版

Genius_Star @ 2024-08-05 13:23:00

就是说,输入数据较大的时候,要用一些特别的方式自己来生成一个长度为 n0/1 序列。

但是本人尝试多种,fib,异或等,发现都有循环节,一下就可以卡过去。

这里求一种较好的生成方式。


by jason_sun @ 2024-08-05 13:26:41

考虑生成 unsigned long long 行不


by Po7ed @ 2024-08-05 13:26:52

随机数&1 生成每一位,随机数用 mt19937。

不知道是否符合 lz 要求


by houmy @ 2024-08-05 13:29:14

或者把随机数用二进制拆分,拆出来 32 位之类的,然后循环节就能乘上 32。还可以用不止一个种子,到一个循环节就换一个种子。


by _Weslie_ @ 2024-08-05 13:34:20

随机数(rand),然后二进制拆分输出即可。

为了更加确保随机性可以把下一个随机种子设为随机出的数。

#include<bits/stdc++.h>
using namespace std;
long long a;
int main(){
    srand(time(0));
    for(int i=1;i<=10000;i++){
        a=(rand()%10000+1)*(rand()%10000+1)*(rand()%10000+1)*(rand()%10000+1)+(rand()%10000+1);
        srand(a);
        while(a){
            cout<<((a%2)+2)%2;
            a/=2;
        } 
    }
    return 0;
}

不知道这样的方式符不符合要求。


by NikaidouHiro @ 2024-08-05 13:38:13

@Genius_Star 你拆 64 位,每位用移位异或的方式生产即可。


by SafariMo @ 2024-08-05 13:38:18

string 读入。


by NikaidouHiro @ 2024-08-05 13:38:38

@Weslie 哥们他是要压缩输入。


by NikaidouHiro @ 2024-08-05 13:39:38

@WhisperingWillow 真不好说吧,能避免的还是避免一下。不然到时候被选手喷了


by buyao_wan_yuanshen @ 2024-08-05 13:46:26

@Genius_Star

设一个在 \sqrt(n) 左右的随机数 x,分段生成,每段长度 x


by incra @ 2024-08-05 14:00:26

@Genius_Star 你可以借鉴一下别人的生出数据的代码,然后把它生成的数据按 64 位拆分。


|