本文共 1210 字,大约阅读时间需要 4 分钟。
简单题。统计一下即可。
#include #include #include #include #include #include #include #include using namespace std;const int maxn=100000+10;struct Node{ int left; int right; int val; int dep;} s[maxn];int n;int a[maxn];int max_dep,n1,n2;void dfs(int x,int dep){ max_dep=max(max_dep,dep); s[x].dep=dep; if(s[x].left!=-1) dfs(s[x].left,dep+1); if(s[x].right!=-1) dfs(s[x].right,dep+1);}void DFS(int x){ if(s[x].dep==max_dep) n1++; else if(s[x].dep==max_dep-1) n2++; if(s[x].left!=-1) DFS(s[x].left); if(s[x].right!=-1) DFS(s[x].right);}int main(){ scanf("%d",&n); if(n==0) printf("0 + 0 = 0\n"); else { for(int i=1; i<=n; i++) scanf("%d",&a[i]); for(int i=0; i<=n; i++) s[i].left=s[i].right=-1; int id=0; s[id++].val=a[1]; for(int i=2; i<=n; i++) { int now=0; while(1) { if(a[i]<=s[now].val) { if(s[now].left!=-1) now=s[now].left; else { s[now].left=id; s[id++].val=a[i]; break; } } else { if(s[now].right!=-1) now=s[now].right; else { s[now].right=id; s[id++].val=a[i]; break; } } } } max_dep=n1=n2=0; dfs(0,1); DFS(0); printf("%d + %d = %d\n",n1,n2,n1+n2); } return 0;}
转载于:https://www.cnblogs.com/zufezzt/p/5645234.html