为什么n设在main()里面是对的,设在main外面错了?
查看原帖
为什么n设在main()里面是对的,设在main外面错了?
558686
KinoTsuki楼主2023/7/15 21:46

这是AC的代码

#include<stdio.h>

const int N =100005;
struct node {
	int fore,next;
}a[N];

bool b[N];
void add(int p,int k) {//k->p->k.next
	a[a[k].next].fore=p;
	a[p].fore=k;
	a[p].next=a[k].next;
	a[k].next=p;
}
int main() {
//	freopen("in.txt","r",stdin);
	a[0]={0,1};
	a[1]={0,N};
	a[N]={1,N};
	int n;//看好这个n,设n在main()里面 
	scanf("%d",&n);
	int k,p;
	int i=2;
	for(i;i<=n;i++) {
		scanf("%d%d",&k,&p);
		if(p==0) {
			add(i,a[k].fore);
		}
		else {
			add(i,k);
		}
	}
	b[0]=true;
	scanf("%d",&p);
	while(p--) {
		scanf("%d",&k);
		b[k]=true;
	}
	i=0;
	for(i;a[i].next!=i;i=a[i].next) {
		if(!b[i]) printf("%d ",i);
	}
//	fclose(stdin);
	return 0;
}

可是,如果我将int n写在main()外面,其余不变,即

#include<stdio.h>

const int N =100005;
struct node {
	int fore,next;
}a[N];
int n;//设n在main()外面 
bool b[N];
void add(int p,int k) {//k->p->k.next
	a[a[k].next].fore=p;
	a[p].fore=k;
	a[p].next=a[k].next;
	a[k].next=p;
}
int main() {
//	freopen("in.txt","r",stdin);
	a[0]={0,1};
	a[1]={0,N};
	a[N]={1,N};
	
	scanf("%d",&n);
	int k,p;
	int i=2;
	for(i;i<=n;i++) {
		scanf("%d%d",&k,&p);
		if(p==0) {
			add(i,a[k].fore);
		}
		else {
			add(i,k);
		}
	}
	b[0]=true;
	scanf("%d",&p);
	while(p--) {
		scanf("%d",&k);
		b[k]=true;
	}
	i=0;
	for(i;a[i].next!=i;i=a[i].next) {
		if(!b[i]) printf("%d ",i);
	}
//	fclose(stdin);
	return 0;
}

就会 WA

为什么啊?求大佬解答!

2023/7/15 21:46
加载中...