1 条题解

  • 1
    @ 2025-11-24 18:24:48

    对拍是一种可以让我们快速检测自己代码正确性的方式。一组对拍程序由以下几种程序组成:数据生成器,暴力程序,自己的程序及对拍程序。

    以本题为例写一组对拍程序,示例如下:

    1.个人程序 mycode.cpp,这里自己写就好了,不需要freopen

    2.数据生成器 maker.cpp,注意数据不要太大以免暴力超时。

    #include<bits/stdc++.h>
    using namespace std;
    mt19937 gen(time(0));
    int get(int mod){return (gen()%mod);}
    int main()
    {
    	int n=5,m=10;//n和m可以自己改变,能理解即可
    	cout<<n<<'\n';
    	for(int i=1;i<=n;i++)cout<<get(m)<<" ";
    	return 0;
    }
    

    3.暴力程序 runner.cpp

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int a[110];
    bool pd(int x)
    {
    	int y=sqrt(x);
    	return y*y==x;
    }
    signed main()
    {
    	int n;cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i];
    	int ans=0;
    	for(int i=1;i<=n;i++)
    		for(int j=i+1;j<=n;j++)
    			if(pd(a[i]*a[j]))ans++;
    	cout<<ans;
    	return 0;
    }
    

    4.对拍程序 duipai.cpp,也是最重要的部分。

    #include<bits/stdc++.h>
    using namespace std;
    bool solve()
    {
    	system("maker.exe > std.in");
    	system("runner.exe < std.in > std.out");
    	system("mycode.exe < std.in > myout.txt");
    	if(system("fc myout.txt std.out"))
    	{
    		puts("WA");
    		return 0;
    	}
    	else 
    		puts("AC");
    	return 1;
    }
    int main()
    {
    	int n=200;//你可以根据自己的需要设定调试数组,也可以while(1) 
    	while(n--)
    	{
    		if(solve()==0)return 0;
    	}
    	return 0;
    }
    

    注意,这4个程序需要放到同一个文件夹里,且对拍的文本文件会自动生成。

    • 1

    信息

    ID
    7904
    时间
    2000ms
    内存
    1024MiB
    难度
    7
    标签
    递交数
    38
    已通过
    9
    上传者