首页 > 代码库 > 【暴力】vijos P1897 学姐吃牛排
【暴力】vijos P1897 学姐吃牛排
判断堆:递归判断每个节点的孩子是否都比其父亲大(小)。
判断BST:中序遍历是否有序。
1 #include<cstdio> 2 using namespace std; 3 #define lc (rt<<1) 4 #define rc (rt<<1|1) 5 int T,n,a[1001],b[1001],en; 6 void Mid(int rt) 7 { 8 if(lc<=n) Mid(lc); 9 b[++en]=a[rt];10 if(rc<=n) Mid(rc);11 }12 bool is_BST()13 {14 bool f1=1,f2=1; en=0; Mid(1);15 for(int i=2;i<=n;i++) if(b[i]<b[i-1]) {f1=0; break;}16 if(f1) return 1;17 for(int i=2;i<=n;i++) if(b[i]>b[i-1]) {f2=0; break;}18 if(f2) return 1;19 return 0;20 }21 bool is_Heap(int rt)22 {23 if(lc<=n)24 {25 if(a[lc]>a[rt]) return 0;26 if(!is_Heap(lc)) return 0;27 }28 if(rc<=n)29 {30 if(a[rc]>a[rt]) return 0;31 if(!is_Heap(rc)) return 0;32 }33 return 1;34 }35 bool is_Heap_2(int rt)36 {37 if(lc<=n)38 {39 if(a[lc]<a[rt]) return 0;40 if(!is_Heap_2(lc)) return 0;41 }42 if(rc<=n)43 {44 if(a[rc]<a[rt]) return 0;45 if(!is_Heap_2(rc)) return 0;46 }47 return 1;48 }49 int main()50 {51 scanf("%d",&T);52 for(int i=1;i<=T;i++)53 {54 printf("Case #%d: ",i);55 scanf("%d",&n);56 for(int j=1;j<=n;j++) scanf("%d",&a[j]);57 bool flag1=0,flag2=0;58 if(is_BST()) flag1=1;59 if(is_Heap(1)) flag2=1;60 if((!flag2)) if(is_Heap_2(1)) flag2=1;61 if(flag1&&flag2) puts("Both");62 else if(flag1) puts("BST");63 else if(flag2) puts("Heap");64 else puts("Neither");65 }66 return 0;67 }
【暴力】vijos P1897 学姐吃牛排
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。