社区讨论

手写的随机数据,帮助大家调试

P5350序列参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lobp99gm
此快照首次捕获于
2023/10/30 00:42
2 年前
此快照最后确认于
2023/11/04 05:23
2 年前
查看原帖

rt,因为本蒟蒻和机房里的同学都在这个毒瘤题调了好几个小时,就想写个数据生成器方便其他人调试

输入n和m这个代码就可以整出一组随机的符合要求的数据,希望能帮到大家。
CPP
#include <stdio.h>
#include <algorithm>
#include <time.h>
typedef long long ll;
ll seed;
ll rnd(){
	ll ret=seed;
	seed=(seed*7+13)%(1000000007);
	return ret;
}
int n,m;
int len=300001;
int l1,l2,r1,r2;
int a[5];
void swap(int &a,int &b){
    a^=b;
    b^=a;
    a^=b;
}
void make(){
    for (int i=1;i<=3;i++){
        a[i]=rnd()%len+1;
    }
    if (a[1]==a[2]||a[1]==a[3]||a[2]==a[3]) make();
    std::sort(a+1,a+4);
    a[4]=a[3]+a[2]-a[1];
    if (a[4]>len)   make();
    l1=a[1],r1=a[2],l2=a[3],r2=a[4];
}
int main(){
    //freopen("1.txt","w",stdout);
    scanf("%d%d",&len,&m);
    seed=(unsigned)time(0);
    printf("%d %d\n",len,m);
    for (int i=1;i<=len;i++){
        printf("%lld ",rnd());
    }
    printf("\n");
    for (int i=1;i<=m;i++){
        int op=rnd()%6+1;
        printf("%d ",op);
        switch (op){
            case 1:{
                int l=rnd()%len+1,r=rnd()%len+1;
                if (l>r)    swap(l,r);
                printf("%d %d\n",l,r);
                break;
            }
            case 2:{
                int l=rnd()%len+1,r=rnd()%len+1,val=rnd();
                if (l>r)    swap(l,r);
                printf("%d %d %d\n",l,r,val);
                break;
            }
            case 3:{
                int l=rnd()%len+1,r=rnd()%len+1,val=rnd();
                if (l>r)    swap(l,r);
                printf("%d %d %d\n",l,r,val);
                break;
            }
            case 4:{
                make();
                printf("%d %d %d %d\n",l1,r1,l2,r2);
                break;
            }
            case 5:{
                make();
                printf("%d %d %d %d\n",l1,r1,l2,r2);
                break;
            }
            case 6:{
                int l=rnd()%len+1,r=rnd()%len+1;
                if (l>r)    swap(l,r);
                printf("%d %d\n",l,r);
                break;
            }
        }
    }
    return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...