求助,测样例时卡,调试时也卡退
查看原帖
求助,测样例时卡,调试时也卡退
188360
carreye楼主2021/2/18 21:05

RT

#include<iostream>
using namespace std;
int n,a[1500];
bool b,i;
struct node{
	char fbi;
	int len;
	node* son1;
	node* son2;
};
node* buildtree(int l,int r)
{
	node tmp,tmp1,tmp2;
	node* s=&tmp;
	s->son1=&tmp1;
	s->son2=&tmp2;
	s->len=r-l+1;
	if(s->len==1)
	{
		if(a[l]==0)
		{
			s->fbi='b';
		}
		else
		{
			s->fbi='i';
		}
	}
	b=false;
	i=false;
	for(int j=l;j<=r;j++)
	{
		if(a[j]==0) b=true;
		else i=true;
	}
	if(b&&i)
	{
		s->fbi='f';
		s->son1=buildtree(l,(l+r-1)/2);
		s->son2=buildtree((l+r-1)/2,r);
	}
	else if(b)
	{
		s->fbi='b';
	}
	else
	{
		s->fbi='i';
	}
	return s;
}
void print(node* s)
{
	if(s->fbi=='b')
	{
		for(int j=1;j<=s->len;j++)
		{
			cout<<"B";
		}
	}
	else if(s->fbi=='i')
	{
		for(int j=1;j<=s->len;j++)
		{
			cout<<"I";
		}
	}
	else
	{
		print(s->son1);
		print(s->son2);
		cout<<"F";
	}
}
int main()
{
	cin>>n;
	int n2=1<<n;
	for(int j=1;j<=n2;j++)
	{
		char c;
		cin>>c;
		a[j]=c-'0';
		if(a[j]==0) b=true;
		else i=true;
	}
	if(b&&i)
	{
		node* f;
		f=buildtree(1,n2);
		print(f);
	}
	else if(b)
	{
		int len2=2<<(n+1)-1;
		for(int j=1;j<=len2;j++)
		{
			cout<<"B";
		}
	}
	else
	{
		int len2=1<<(n+1)-1;
		for(int j=1;j<=len2;j++)
		{
			cout<<"I";
		}
	}
	return 0;
}

2021/2/18 21:05
加载中...