社区讨论
我这个非递归后序与什么问题
P1087[NOIP 2004 普及组] FBI 树参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo183ho5
- 此快照首次捕获于
- 2023/10/22 16:44 2 年前
- 此快照最后确认于
- 2023/11/02 16:34 2 年前
样例本地可:
评测第一个点好像就是样例来着,可是没过。
评测第一个点好像就是样例来着,可是没过。我的思路:
枚举每一个叶节点
a[i],并找出i之前的所有到i距离2^x(i%(2^x)==0,即防止i==6,(2^x)==4,结果把2~6算进去的情况)的所有情况,相当于找根节点。我的语言可能比较抽象,所以下面以样例为例写一下
CPP3
10001011
i==1,
a[i]为I串,put I 。向前无串i==2,
a[i]为B串,put B。向前有长度为2的串,遍历,为F,put Fi==3,
a[i]为B串,put B。向前无串(2~3虽有2^1,但3%2!=0)i==4,
a[i]为B串,put B。向前有长度2,4的串(2先,从小到大判断),长度为2的串为3~4,为B串,put B。成都4的同理,put F以此类推
代码如下
CPP#include <bits/stdc++.h>
using namespace std;
inline int read()
{
int ans=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')
{
f=-1;
}
c=getchar();
}
while(c>='0'&&c<='9')
{
ans=ans*10+c-'0';
c=getchar();
}
return ans*f;
}
int n;
char a[2048];
int main()
{
freopen("Sort.in","r",stdin);
freopen("Sort.out","w",stdout);
n=read();
int tmp=pow(2,n);
for(int i=1;i<=tmp;i++)
{
a[i]=getchar();
}
for(int i=1;i<=tmp;i++)
{
for(int j=1;j<=tmp;j*=2)
{
if(i%j==0)
{
if(j==1)
{
if(a[i]=='1')
{
putchar('I');
}
else
{
putchar('B');
}
}
else
{
if(i%j==0)
{
bool flagI=0,flagB=0,flagF=0;
for(int l=i-j+1;l<=i;l++)
{
if(a[l]=='1')
{
flagI=1;
}
if(a[l]=='0')
{
flagB=1;
}
if(flagI&&flagB==1)
{
putchar('F');
flagF=1;
break;
}
}
if(flagF==0)
{
if(flagI==1)
{
putchar('I');
}
else
{
putchar('B');
}
}
}
}
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...