1.为什么不用写return呢?
2.为什么边界写(l>r), (l,mid−1)不对,写(l==r),(l,mid)就对了???
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
char a[20000];
void make_tree(ll l, ll r){
if(l > r) return;
int mid = l + (r - l >> 1);
make_tree(l , mid-1);
make_tree(mid+1 , r);
bool B = true, I = true;
for(register ll i = l; i <= r; ++i){
if(a[i] == '1') B = false;
if(a[i] == '0') I = false;
}
if(B)printf("B");
else if(I)printf("I");
else if(!B and !I)printf("F");
}
int main(){
scanf("%lld", &n);
scanf("%s", (a+1));
make_tree(1 , pow(2 , n));
return 0;
}
这是两处错误的代码
正确如下
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
char a[20000];
void make_tree(ll l, ll r){
int mid = l + (r - l >> 1);
if(l != r){
make_tree(l , mid);
make_tree(mid+1 , r);
}
bool B = true, I = true;
for(register ll i = l; i <= r; ++i){
if(a[i] == '1') B = false;
if(a[i] == '0') I = false;
}
if(B)printf("B");
else if(I)printf("I");
else if(!B and !I)printf("F");
}
int main(){
scanf("%lld", &n);
scanf("%s", (a+1));
make_tree(1 , pow(2 , n));
return 0;
}