洛谷P1087 [NOIP 2004 普及组] FBI 树
#include <bits/stdc++.h>
using namespace std;
struct tree{
	int l,r;
	char v;
}t[3001];
string s;
int n;
int two[12]={1,2,4,8,16,32,64,128,256,512,1024,2048};
void hou(int x){
	if(x==0)return;
	hou(t[x].l);
	hou(t[x].r);
	cout<<t[x].v;
}

int main() {
	cin>>n>>s;
	for(int i=1;i<=two[n]-1;i++){
		t[i].l=2*i;
		t[i].r=2*i+1;
	}
	int pos=two[n];
	for(int i=0;i<s.size();i++){
		if(s[i]=='0')t[pos].v='B';
		if(s[i]=='1')t[pos].v='I';
		pos++;
	}
	for(int i=two[n]-1;i>=1;i--){
		if(t[i*2].v=='F'||t[i*2+1].v=='F')t[i].v='F';
		if(t[i*2].v=='I'&&t[i*2+1].v=='I')t[i].v='I';
		if(t[i*2].v=='B'&&t[i*2+1].v=='B')t[i].v='B';
		if((t[i*2].v=='I'&&t[i*2+1].v=='B')||(t[i*2].v=='B'&&t[i*2+1].v=='I'))t[i].v='F';
		
	}
	hou(1);

 	return 0;
}

最下层叶子节点记得区分,初始化时末尾叶子节点的左右节点要初始化为0,这样递归时可以用是否为0来判断是否到达边界(如果遇到无输出可能是这种情况)

然后就是处理问题条件要仔细,千万仔细,他妈的全是细节啊,多模拟模拟也行

substr用法: s.substr(int a,int len); // s代表要截取的字符串,a代表从第几位开始截取,len为截取长度

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇