很多人对数据的生成都有疑惑,到底是怎么样可以快速、简单的生成高质量数据呢?
1、准备题面与标程
这个就需要自己去准备了,如果连标程都写不来那也没必要出题或对拍。(如果是对拍的话暴力就可以了)
2、根据数据范围修改文件
代码
#include<bits/stdc++.h>
//#define random(a,b) rand()%(b-a+1)+a//这个没必要用,出的数据比较小
#define randd() rand()*rand()//保证不超过rand范围且随机性高
using namespace std;
const int Case = 10;//总共的数据数量
void generateData(int t) {
int n=randd()%10+50*(t-1)+1;//首先创造一个随机数,随后用MOD来限制数据的范围
int m=randd()%100+600*(t-1)+1;
cout<<n<<" "<<m<<endl;
int nn=n;
while(nn--){
int a,b,c;
a=(rand()%10+1)*10;
b=(rand()%10+1)*(t>5?10:100);
c=rand()%10+1;
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
int main()
{
srand(time(NULL));//这样随机数就会随机,反正必须加
char in[100];
for(int t = 1; t <= Case; t++) {
sprintf(in, "data_%d.in", t);//生成的数据格式
freopen(in, "w", stdout);
generateData(t);
}
return 0;
}
效果图
3、生成答案
注:所有文件必须放在同一文件夹。
#include<bits/stdc++.h>
using namespace std;
const int Case = 10;
int main()
{
char in[100];
for(int t=1; t<=Case; t++)
{
sprintf(in, "data_%d.in", t);//刚才生成的文件
freopen(in, "r",stdin);
sprintf(in, "data_%d.out", t);
freopen(in, "w",stdout);
system("std.exe");//标程
}
return 0;
}
其他
若有关于图、数等的数据生成点这里