关于ACGO著名OIer-cjdst
2025-07-07 10:17:26
发布于:浙江
彩蛋:注意找找 cjdst 排位赛8T4的代码有什么特别之处(((
全部评论 3
看不出来
#include <iostream> #include <cstdio> using namespace std; struct node{ int data; node *left = nullptr, *right = nullptr;//左子树,右子树 }; int a[100005], b[100005]; node *build(int prest, int preed, int inst, int ined){//构建二叉树 if(prest > preed || inst > ined) return nullptr;//没了 node *root = new node;//定义根节点 root -> data = a[prest]; int idx = -1; for(int i = inst; i <= ined; i++){//找根节点 if(b[i] == a[prest]){//找到了 idx = i; break; } }if(idx == -1) return nullptr;//没找到,输了 int leftsize = idx - inst, rightsize = ined - idx; root -> left = build(prest + 1, prest + leftsize, inst, idx - 1);//左子树 root -> right = build(preed - rightsize + 1, preed, idx + 1, ined);//柚子树 if((root -> left == nullptr && leftsize > 0) || (root -> right == nullptr && rightsize > 0)) return nullptr;//左子树没有或者右子树没有都不行 return root; }int get_(node *root, int ct){ if(root == nullptr) return 0;//没了 if(root -> left == nullptr && root -> right == nullptr) return ct; return get_(root -> left, ct + 1) + get_(root -> right, ct + 1); } int main(){ int t, n; scanf("%d", &t); while(t--){ scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", a + i); }for(int i = 1; i <= n; i++){ scanf("%d", b + i); } node *root = build(1, n, 1, n);//构建 printf("%d\n", (root == nullptr ? -1 : get_(root, 0))); } return 0; }
2025-07-14 来自 浙江
0?
2025-07-11 来自 山西
0?
2025-07-13 来自 浙江
0?
2025-07-13 来自 湖南
0
我们都不知道 cjdst ACGO ID 是什么(
2025-07-07 来自 浙江
0
有帮助,赞一个