为什么是这样?(玄关)
查看原帖
为什么是这样?(玄关)
1328579
mairuisheng楼主2024/11/5 13:35

改前

WA:92pts AC:8pts

LINK

#include<iostream>
#define int long long
using namespace std;
inline int read()
{
	int x=0,f=1;
	char s;
	s=getchar();
	while(s<'0'||s>'9')
	{
		if(s=='-')f=-f;
		s=getchar();
	}
	while(s>='0'&&s<='9')
	{
		x=(x<<3)+(x<<1)+(s-48);
		s=getchar();
	}
	return x*f;
}
const int N=1e6+1;
struct node
{
	int lch;
	int rch;
	int val;
}tree[N];
int n;
int ans;
bool bitr(int nleft,int nright)
{
	if(nleft==-1&&nright==-1)return true;
	if(nleft==-1||nright==-1)return false;
	if(tree[nleft].val!=tree[nright].val)return false;
	if(bitr(tree[nleft].lch,tree[nright].rch)&&bitr(tree[nleft].rch,tree[nright].lch))return true;//这里有问题
}
int sum(int nd)
{
	if(nd==-1)return 0;
	return 1+sum(tree[nd].lch)+sum(tree[nd].rch);
}
int max(int x,int y)
{
	return x>y?x:y;
}
signed main()
{
	int i,r;
	n=read();
	for(i=1;i<=n;i++)tree[i].val=read();
	for(i=1;i<=n;i++)
	{
		tree[i].lch=read();
		tree[i].rch=read();
	}
	for(i=1;i<=n;++i)
	{
		if(bitr(i,i))ans=max(sum(i),ans);
	}
	printf("%lld",ans);
	return 0;
}

改后(第39行不一样)

AC:100pts

LINK

#include<iostream>
#define int long long
using namespace std;
inline int read()
{
	int x=0,f=1;
	char s;
	s=getchar();
	while(s<'0'||s>'9')
	{
		if(s=='-')f=-f;
		s=getchar();
	}
	while(s>='0'&&s<='9')
	{
		x=(x<<3)+(x<<1)+(s-48);
		s=getchar();
	}
	return x*f;
}
const int N=1e6+1;
struct node
{
	int lch;
	int rch;
	int val;
}tree[N];
int n;
int ans;
bool bitr(int nleft,int nright)
{
	if(nleft==-1&&nright==-1)return true;
	if(nleft==-1||nright==-1)return false;
	if(tree[nleft].val!=tree[nright].val)return false;
	return bitr(tree[nleft].lch,tree[nright].rch)&&bitr(tree[nleft].rch,tree[nright].lch);
}
int sum(int nd)
{
	if(nd==-1)return 0;
	return 1+sum(tree[nd].lch)+sum(tree[nd].rch);
}
int max(int x,int y)
{
	return x>y?x:y;
}
signed main()
{
	int i,r;
	n=read();
	for(i=1;i<=n;i++)tree[i].val=read();
	for(i=1;i<=n;i++)
	{
		tree[i].lch=read();
		tree[i].rch=read();
	}
	for(i=1;i<=n;++i)
	{
		if(bitr(i,i))ans=max(sum(i),ans);
	}
	printf("%lld",ans);
	return 0;
}

为什么是这样?(玄关)

2024/11/5 13:35
加载中...