算法竞赛进阶指南 0x70 综合技巧与实践
0x71 C++ STL
0x72 随机数据生成与对拍
NOIP 复赛 必备 能力
随机数据生成与对拍 简单实践 如下
P1177 【模板】快速排序
https://www.luogu.org/problemnew/show/P1177可提供在线测评
bf:brute force 暴力,朴素解法
bf.cpp bf.exe
//冒泡排序 暴力 枚举
#include
#define maxn 100100
int a[maxn];
int main(){
int n,i,j,t;
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
for(i=1;i<=n;i++)//自小到大排序
for(j=i+1;j<=n;j++)
if(a[i]>a[j])t=a[i],a[i]=a[j],a[j]=t;
for(i=1;i<=n;i++)printf("%d ",a[i]);
return 0;
}
sol:solution 正解 准备提交测评的程序
sol.cpp sol.exe
#include
#define maxn 100100
int a[maxn];
void quicksort(int left,int right){
int i=left,j=right,mid=a[(left+right)/2],t;
while(i<=j){
while(a[i]
if(i<=j)t=a[i],a[i]=a[j],a[j]=t,i++,j--;
}
if(i
int main(){
int n,i;
freopen("data.in","r",stdin);
freopen("data.ans","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
quicksort(1,n);
for(i=1;i<=n;i++)printf("%d ",a[i]);
return 0;
}
random:随机数据生成程序
random.cpp random.exe
//生成 整数 序列
#include
#include
#include
#define maxn 100
#define maxa 1000000000
int random(int n){
return (long long)rand()*rand()%n;
}
int main(){
int n,i;
freopen("data.in","w",stdout);
srand((unsigned int)time(0));
n=random(maxn)+1;//数据个数n
printf("%d\n",n);
for(i=1;i<=n;i++)printf("%d ",random(maxa)+1);
printf("\n");
return 0;
}
test:Windows 系统对拍程序
test.cpp test.exe
#include
#include
#include
int main(){
int i;
double st,ed;
for(i=1;i<=1000;i++){
system("random");
st=clock();
system("sol");
ed=clock();
system("bf");
if(system("fc data.out data.ans")){
printf("Wrong Answer! %d\n",i);
return 0;
}else
printf("Accepted,测试点 #%d, 用时%.0lfms\n",i,ed-st);
}
return 0;
}
生成四个可执行文件
bf.exe sol.exe random.exe test.exe
放在同一个文件夹内
在cmd 运行 test.exe
以下为程序运行情况
文件夹会生成三个文件 data.in data.out data.ans
2018-4-11