zoukankan      html  css  js  c++  java
  • 实战技巧--对拍

    yzh老师在清北学堂最后一天教的对拍:

    1. 创建一个文件夹

    2. 将你要对拍的源代码copy进去(例:test.cpp)

    3. 将你写好且确定无误的暴力代码也放进去,注意两者名字要有所区别(例:test__.cpp)

    4. 搞一个生成数据的代码(例:mkdata.cpp)

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<ctime>
    #define For(i,l,r) for(int i=l;i<=r;i++)
    int main(){
    	freopen("coin.in","w",stdout);
    	srand(time(0));
    	int n = 1000; 
    //	printf("%d
    ",n);
    	For(i,1,n) printf("%lf %lf
    ",(rand()%200+100)/100.0,(rand()%200+100)/100.0);
    }
    

    这段代码能生成n行每行两个大于1,

    且在1~3之间的高精浮点数
    (佬师太喜欢用宏定义了)

    1. 最后撸个bat脚本
    :loop
    	mkdata
    	test
    	test__
    	fc test.out test__.out
    	if errorlevel == 1 pause
    goto loop
    

    loop表示循环,然后是你要打开的.exe

    所以注意,在打开脚本前我们一定要先运行一遍代码生成.exe。

    fc是用来文件比较,

    若有不符它就会暂停输出行字,具体还请读者实现。


    UPDATE 4.27:

    • 生成区间:
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <ctime>
    #include <cstring>
    using namespace std;
    int random(int n)//生成1-n的随机整数 
    {
    	return (long long)rand()*rand()%n+1;
    }
    int main()
    {
    	freopen("1poker2.out","w",stdout); 
    	srand((unsigned)time(0));
    	int n=random(100); 
    	int m=random(100);//询问次数 
    	cout<<n<<endl;
    	for(int i=1;i<=n;i++){
    		cout<<random(50)<<' ';
    	}
    	cout<<endl;
    	cout<<m<<endl;
    	for(int i=1;i<=m;i++)
    	{
    		int l=random(n);
    		int r=random(n);
    		if(l>r)swap(l,r);
    		printf("%d %d
    ",l,r);
    	}
    	fclose(stdout);
    	return 0;
    }
    
    • 生成图
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <utility>
    #include <map>
    #include <ctime>
    using namespace std;
    pair<int ,int> e[100005];
    map<pair<int,int>,bool>h;
    int random(int x){
    	return (long long )rand()*rand()%x;
    }
    int main()
    {
    	freopen("data.in","w",stdout);
    	int n,m;
    	srand((unsigned)time(0));
    	n=random(1000);
    	while(m<n-1)m=random(100005);
    	cout<<n<<' '<<m<<endl;
    	for(int i=1;i<n;i++){//先生成树保证联通
    		int fa=random(i)+1;
    		e[i]=make_pair(fa,i+1);
    		h[e[i]]=h[make_pair(i+1,fa)] =1;
    	}
    	for(int i=n;i<=m;i++){
    		int x,y;
    		do{
    			x=random(n)+1,y=random(n)+1;
    		}while(x==y||h[make_pair(y,x)]);
    		e[i]=make_pair(x,y);
    		h[e[i]]=h[make_pair(y,x)]=1;
    	}
    	random_shuffle(e+1,e+m+1);
    	for(int i=1;i<=m;i++){
    		cout<<e[i].first<<' '<<e[i].second<<endl;
    	}
    /*	int s=random(n)+1,t=random(n)+1,k=random(100)+1;
    	cout<<s<<' '<<t<<' '<<k<<endl;*/
    	fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    二十三种设计模式 python实现
    python logging的输出
    redis
    Django1.11序列化与反序列化
    Django1.11基础视图
    Django1.11模型类数据库操作
    Django1.11创建
    泛型全面分析和应用(二)
    泛型全面分析和应用(一)
    注解的基本盘点 -- 《Java编程思想》
  • 原文地址:https://www.cnblogs.com/Rye-Catcher/p/8962706.html
Copyright © 2011-2022 走看看