#include<iostream>
#include<cstring>//9.10
using namespace std;
const int N = 100;
int a[N],cnt = 0;
void dfs(int x,int l){
int t = x/ 2;
bool flag = true;
while(t > 0) {
if(a[t] > a[x]){
flag = false;
break;
}
t = t / 2;
}
if(flag) cnt++;
if(2 *x <= l)
dfs(2 * x,l);
if(2 * x + 1 <= l)
dfs(2 * x + 1,l);
}
int main(){
int j = 1;
string input;
getline(cin,input);
for(int i = 0;i <input.length();i++){
if(input[i] >='0' && input[i] <= '9') a[j++] = input[i] - '0';
else if(input[i] == 'n') a[j++] = 0;
}
dfs(1, j - 1);
cout << cnt ;
return 0;
}
刚开始想省略根节点,让cnt从1开始,发现那样会忽略根节点的右子树。
注意输入的处理,getline(cin,input)
第一次写题解,希望顺利通过复试,加油~