求助bat对拍神奇错误
  • 板块学术版
  • 楼主吴思诚
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/1/22 10:39
  • 上次更新2023/10/24 03:21:22
查看原帖
求助bat对拍神奇错误
371848
吴思诚楼主2023/1/22 10:39

RT,而且这个错误不止一次出现了。 这是我桌面上的对拍文件。

gen.cpp

#include <bits/stdc++.h>
using namespace std;
random_device gen;
mt19937 rd(gen());
const int n=6,d=2;
int a[n+1];
int f[n+1];
int find(int x){return f[x]==x?x:find(f[x]);}
void get(int len){
    shuffle(a+1,a+1+n,rd);
    printf("%d ",len);
    for(int i=1;i<=len;++i){
        printf("%d ",a[i]);
    }
    puts("");
}
int main(){
	printf("%d %d\n",n,d);
	int u,v,x,y;
	for(int i=1;i<n+1;i++)f[i]=i,a[i]=i;
	for(int i=1;i<n;){
		u=rd()%n+1;
		v=rd()%n+1;
		x=find(u);y=find(v);
		if(x==y)continue;
		printf("%d %d\n",u,v);
		f[x]=y;
		i++;
	}
    int m1=rd()%n+1,m2=rd()%n+1;
    get(m1),get(m2);
    return 0;
}

my.cpp

#include<bits/stdc++.h>
using namespace std;
const int N=200010,M=2*N;
int n,d,a[N],b[N],h[N],e[M],ne[M],idx,m1,m2,ans;
bool v1[N],v2[N];
void add(int a,int b){
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,bool v[],int fa){
    for(int i=h[u];~i;i=ne[i]){
        int j=e[i];
        if(j==fa)continue;
        dfs(j,v,u);
        if(v[j])v[u]=1;
    }
    if(v[u]&&u!=1)ans+=2;
}
void dfs2(int u,int fa,int dep){
    if(!v1[u]&&!v2[u])return;
    if(dep>d)ans+=2;
    for(int i=h[u];~i;i=ne[i]){
        int j=e[i];
        if(j==fa)continue;
        if(!(v1[j]&&v2[j]))dfs2(j,u,dep+1);
        else dfs2(j,u,0);
    }
}
int main(){
    puts("hello world");
    return 0;
    memset(h,-1,sizeof h);
    scanf("%d%d",&n,&d);
    for(int i=1;i<n;++i){
        int a,b;
        scanf("%d%d",&a,&b);
        add(a,b),add(b,a);
    }
    scanf("%d",&m1);
    for(int i=1;i<=m1;++i)scanf("%d",a+i),v1[a[i]]=1;
    scanf("%d",&m2);
    for(int i=1;i<=m2;++i)scanf("%d",b+i),v2[b[i]]=1;
    dfs(1,v1,0);
    dfs(1,v2,0);
    dfs2(1,0,0);
    printf("%d",ans);
    return 0;
}

std.cpp

#include <bits/stdc++.h>
int n, D, m1, m2, k1[200005], k2[200005];
int d1[200005], d2[200005], d[200005];
int ans ;
std::vector <int> ver[200005];
void dfs(int x, int f){
	if(k1[x] == 1) d1[x] = d[x];
	if(k2[x] == 1) d2[x] = d[x];
	for(int i = 0; i < ver[x].size(); ++i){
		int y = ver[x][i];
		if(y == f) continue;
		d[y] = d[x] + 1;
		dfs(y, x);
		d1[x] = std::max(d1[x], d1[y]);
		d2[x] = std::max(d2[x], d2[y]);
	}
	if(x == 1) return ;
	if(!d1[x] && d2[x] - d[x] <= D - 1) ans -= 2;
	if(!d2[x] && d1[x] - d[x] <= D - 1) ans -= 2;
	return ;
}
void solve(){
	scanf("%d%d", &n, &D);
	ans = 4 * (n - 1);
	for(int i = 1; i <= n - 1; ++i){
		int x, y;
		scanf("%d%d", &x, &y);
		ver[x].push_back(y);
		ver[y].push_back(x);
	}
	scanf("%d", &m1);
	for(int i = 1; i <= m1; ++i){
		int x;
		scanf("%d", &x);
		k1[x] = 1;
	}
	scanf("%d", &m2);
	for(int i = 1; i <= m2; ++i){
		int x;
		scanf("%d", &x);
		k2[x] = 1;
	}
	d[1] = 1;
	dfs(1, 0);
	printf("%d\n", ans);
	//for(int i = 1; i <= n; ++i) printf("%d %d\n", d1[i], d2[i]);
	return ;
}
signed main(){
	int T = 1;
	while(T--) solve();
	return 0;
}

fc.bat

:loop
    @echo off
    gen.exe > gen.in
    my.exe < gen.in > my.out
    std.exe < gen.in > std.out
    fc std.out my.out
if not errorlevel 1 goto loop
pause

fc2.bat

:loop 
    @echo off   
    gen.exe > in.txt                       
    my.exe < in.txt  > myout.txt       
    std.exe < in.txt  > stdout.txt
    fc myout.txt stdout.txt                
if not errorlevel 1   goto loop           
pause

奇怪的是,无论运行 fc.bat 还是 fc2.bat,都停不下来,很明显这两个程序无论如何都会得到不同的输出,这是什么原因?谢谢大佬。

2023/1/22 10:39
加载中...