对拍时输出数据的问题
  • 板块学术版
  • 楼主zhaowangji
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/11 09:35
  • 上次更新2023/11/4 00:55:10
查看原帖
对拍时输出数据的问题
164840
zhaowangji楼主2021/11/11 09:35

题源:CSPS2021T3回文

battle.exe为调用程序。test为爆搜程序。make_data为数据生成程序。

想要输出自己造的数据。但是如果battle像这么写,system("pause")不能发挥作用(程序直接继续运行)。而若把输出数据改为一个另外的程序则解决了这个问题。

请问:为什么直接在battle里输出文件会出现这种情况?

battle.cpp:

#include<bits/stdc++.h>
using namespace std;
int Read();
int main(){
	while(1){
		sleep(1);
		system("make_data.exe");
		freopen("data.in","r",stdin);
		int x;x=Read(),x=Read();
		for(int i=1;i<=6;++i)x=Read(),printf("%d ",x);
		printf("   ");
        fclose(stdin);
		system("test.exe");
		system("pause");
	}   
	return 0;
}
int Read(){
	char ch=getchar();
	int flag=1,res=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-')flag=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		res=(res<<3)+(res<<1)+ch-'0';
		ch=getchar();
	}
	return flag*res;
}

make_data.cpp:

#include<bits/stdc++.h>
using namespace std;
const int n=6;
int vis[10];
int main(){
	freopen("data.in","w",stdout);
	srand(time(0));
	printf("1 3\n");
	for(int i=1;i<=6;++i){
		while(1){
			int x=rand()%3+1;
			if(vis[x]<2){
				++vis[x];
				printf("%d ",x);
				break;
			}
			else continue;
		}
	}
	printf("\n");
	fclose(stdout);
	return 0;
}

test.cpp:

#include<bits/stdc++.h>
using namespace std;
int t,n;
int f,r;
int a[500007],b[500007],c[500007];
int Rflag;
int Read();
void dfs(int k);
void judge();
int main(){
	freopen("data.in","r",stdin);
	t=Read();
	while(t--){
		n=Read();
		for(int i=1;i<=2*n;++i)a[i]=Read();
		f=1,r=2*n,Rflag=0;
		dfs(1);
		if(!Rflag)printf("-1\n");
	}
	fclose(stdin);
}
void judge(){
	for(int i=1;i<=n;++i)if(b[i]!=b[2*n+1-i])return;
	for(int i=1;i<=2*n;++i)c[i]==1?printf("L"):printf("R");
	printf("\n");
	Rflag=1;
}
void dfs(int k){
	if(Rflag)return;
	if(k==2*n+1){judge();return;}
	
	b[k]=a[f];++f;c[k]=1;
	dfs(k+1);
	--f;
	
	b[k]=a[r];--r;c[k]=2;
	dfs(k+1);
	++r;
	
}
int Read(){
	char ch=getchar();
	int flag=1,res=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-')flag=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		res=(res<<3)+(res<<1)+ch-'0';
		ch=getchar();
	}
	return flag*res;
}
2021/11/11 09:35
加载中...