0pts WA + RE求助,玄关
查看原帖
0pts WA + RE求助,玄关
1351155
liuzhuoran141516楼主2024/9/23 17:53
#include <bits/stdc++.h>
using namespace std;
struct fbitree {
	char fbi;
	int id, dad, left, right;
	bool o;
}a[1025];
char ret(char a, char b) {
	if (a == 'F' or b == 'F') {
		return 'F';
	} else if (a == 'B') {
		if (b == 'I') {
			return 'F';
		} else {
			return 'B';
		}
	} else if (a == 'I') {
		if (b == 'B') {
			return 'F';
		} else {
			return 'I';
		}
	}
}
void out(fbitree FBI[], int first) {
	int l = FBI[first].left, r = FBI[first].right, d = FBI[first].dad;
	if (l == 0 or (FBI[l].o == 1 and FBI[r].o == 1)) {
		cout << FBI[first].fbi;
		FBI[first].o = 1;
	} else {
		out(FBI, l);
	}
	if (d == 0) {
		return;
	}
	if (FBI[d].left == first) {
		int k = FBI[d].right;
		out(FBI, k);
	} else {
		out(FBI, d);
	}
}
int n;
int main() {
	cin >> n;
	if (n == 0) {
		char c;
		cin >> c;
		cout << c;
		return 0;
	}
	for (int i = 1; i <= 1 << n; i ++) {
		char c;
		cin >> c;
		a[i].id = i;
		if (c == '0') {
			a[i].fbi = 'B';
		} else if (c == '1') {
			a[i].fbi = 'I';
		}
	}
	int s1 = 1, s2 = 2, now = n, dadid = (1 << n) + 1;
	while (now > 1) {
		a[s1].dad = a[dadid].id;
		a[s2].dad = a[dadid].id;
		a[dadid].left = a[s1].id;
		a[dadid].right = a[s2].id;
		a[dadid].fbi = ret(a[s1].fbi, a[s2].fbi);
		s1 += 2;
		s2 += 2;
		dadid ++;
		if (s1 >= 1 << (now - 1)) {
			now --;
		}
	}
	out(a, 1);
	return 0;
}
2024/9/23 17:53
加载中...