c++对拍模板

砝码称重为例。
data.cpp

create_data()
	使用fout文件流向"input_A.txt"写入数据。
	注意用fout<< 写入
work() // 返回1表示没有差错,返回0表示有差错。
	create_data()
	system("A.exe") // dos调用,执行A.exe程序
	system("B.exe")
	// dos调用,如果调用成功返回0,取反。 
	return !system("fc A_1.txt A_2.txt");
#include<iostream>
#include<fstream>
#include<ctime>
#define endl '\n'
const int N = 1e5;
using namespace std;

void create_data(){
	ofstream fout("input_A.txt");
	int n=rand()%10+1;
	fout<<n<<endl;
	for(int i=0;i<n;i++){
		int w=rand()%100+1;
		fout<<w<<" ";
	}
	fout<<endl;
	fout.close();
}

bool work(){
	create_data();
	system("ans.exe");
	system("dfs.exe");
	//命令成功执行返回0 
	return !system("fc A_1.txt A_2.txt");
}

int main(){
	srand(time(0));
	for(int i=0;i<N;i++){
		if(!work()){//如果不匹配 
			break;
		}
	}
}

A_1.cpp

注意将程序的输入和输出重定向到文件中。
	freopen("input_A.txt","r",stdin);
	freopen("A_1.txt","w",stdout);
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#include<set>
#include<map>
#include<deque> 
#include<vector>
#define endl '\n'
#define pb push_back
#define debug(x) cout<<#x<<":"<<x<<endl
#define all(x) (x).begin(),(x).end()

using namespace std;
const int N = 2e5+10, M = 1e5, mod = 1e9+7;
typedef long long ll;
typedef pair<int,int>PII;

int f[110][N];
int a[110],n;
int main(){
	freopen("input_A.txt","r",stdin);
	freopen("A_1.txt","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	f[0][M]=1;
	for(int i=1;i<=n;i++){
		for(int j=-M;j<=M;j++){
			f[i][j+M] |= f[i-1][j+M];
			if(j+a[i]<=M)
				f[i][j+M] |= f[i-1][j+a[i]+M];
			if(j-a[i]>=-M){
				f[i][j+M] |= f[i-1][j-a[i]+M];
			}
		}
	}
	int ans=0;
	for(int i=1;i<=M;i++){
		if(f[n][i+M]){
			ans++;	
		}
	}
	cout<<ans<<endl;
    return 0;
}

A_2.cpp

注意将程序的输入和输出重定向到文件中。
	freopen("input_A.txt","r",stdin);
	freopen("A_2.txt","w",stdout);
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#include<set>
#include<map>
#include<deque> 
#include<vector>
#define endl '\n'
#define pb push_back
#define debug(x) cout<<#x<<":"<<x<<endl
#define all(x) (x).begin(),(x).end()

using namespace std;
const int N = 2e5+10, M = 2e5+10, mod = 1e9+7;
typedef long long ll;
typedef pair<int,int>PII;

int n;
int a[110];
set<int>st;
void dfs(int u,int wl,int wr){
	if(u>n){
		st.insert(abs(wl-wr));
		return ;
	}
	dfs(u+1,wl,wr);
	dfs(u+1,wl+a[u],wr);
	dfs(u+1,wl,wr+a[u]);
}

int main(){
	freopen("input_A.txt","r",stdin);
	freopen("A_2.txt","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	dfs(1,0,0);
	cout<<st.size()-1<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值