题源: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;
}