以砝码称重为例。
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;
}