·
题目描述
有许多蚂蚁在一根无限长的木棍上,每一只蚂蚁都有一个初始位置和初始朝向(任意两只蚂蚁的初始位置不同)。蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计)。现给出每只蚂蚁的初始位置和初始朝向,请你计算出它们在t秒后的位置和朝向。
输入格式
第一行,两个空格隔开的整数n,t(代表蚂蚁数n和时间t)
第2~n+1行每行两个整数,第i+1行代表第i只蚂蚁的初始位置ai(ai的绝对值在1000000以内)及初始朝向bi(bi=1时蚂蚁朝右,bi=-1时蚂蚁朝左)
输出格式
n行,每行两个整数,第i行代表t秒后第i只蚂蚁的位置及朝向(-1表示朝左,1表示朝右,0表示正在转向中)
输入输出样例
说明/提示
【数据范围】
对于40%的数据,n<=100
对于80%的数据,n<=10000,t<=1000
对于100%的数据,n<=100000,t<=100000
第二步:根据题目要求用随机函数一次生成多个输入数据,代码如下。
#include <bits/stdc++.h>using namespace std;
int n,t,w,bi,h[1000001];
char ins[100]="antx.in";
int main() {
for(int i=0;i<=9;i++){//一次生成10个数据,自己可以修改个数
ins[3]=i+48;//输入文件名更改
freopen(ins,"w",stdout);
srand(time(0));
if(i<4){n=rand()%100+1;t=rand()%100+1;}
else if(i<8){n=rand()%10000+1;t=rand()%1000+1;}
else {n=rand()%100000+1;t=rand()%100000+1;}
cout<<n<<" "<<t<<endl;
//生成n个蚂蚁位置数据
for(int i=1;i<=n;i++){
memset(h,0,sizeof(h));//蚂蚁位置不同
do{
w=rand()%1000000+1;
}while(h[w]==1);
h[w]=1;//标记位置被一只蚂蚁占领
if(rand()%2)bi=-1;
else bi=1;//随机生成朝向
cout<<w<<" "<<bi<<endl;//保存位置+朝向
}
}
fclose(stdout);
cout<<"生成完成!"<<endl;
return 0;
} 最后一步:复制洛谷上的题解代码,生成输出文件 #include <cstdio>
#include <algorithm>
using namespace std;
const int Tmax=100005;
char ins[100]="antx.in",ous[100]="antx.out";
struct node{int x,d,num;};
node ant[Tmax];
int n,m,position[Tmax];
bool cmp1(const node &a,const node &b){return a.x<b.x;}
int main(){
for(int x=0;x<=9;x++){//输出10个数据
ins[3]=ous[3]=x+48;
freopen(ins,"r",stdin);
freopen(ous,"w",stdout);
int i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d %d",&ant[i].x,&ant[i].d);
ant[i].num=i;
}
sort(ant+1,ant+1+n,cmp1);
for(i=1;i<=n;i++){
position[ant[i].num]=i;
ant[i].x+=ant[i].d*m;
}
sort(ant+1,ant+1+n,cmp1);
for(i=1;i<=n;i++)
if(ant[i].x==ant[i+1].x) ant[i+1].d=ant[i].d=0;
for(i=1;i<=n;i++)
printf("%d %d\n",ant[position[i]].x,ant[position[i]].d);
}
return 0;
} 到此为止,测试数据生成完毕,是不是很简单?与其求人,不如求己,有些特例要求自己单个修改几个输入数据再运行生成输入数据即可。掌握了方法,各大网站的习题都是你的模拟测试题库,