NC207264. TreeV
描述
输入描述
数据满足:
示例1
输入:
[1,2,3,4,5]
输出:
14
说明:
树边为(1, 2), (1, 5), (2, 3), (2, 4),加密过程为(1^2)+(1^5)+(2^3)+(2^4),答案为14。Java(javac 1.8) 解法, 执行用时: 161ms, 内存消耗: 30188K, 提交时间: 2020-07-31 21:25:06
import java.util.*; public class Solution { /** * * @param a int整型一维数组 表示这棵完全二叉树的Dfs遍历序列的结点编号 * @return long长整型 */ int n=0; long dfs(int[] a,int k){ if(k>a.length)return 0; int now=a[n++]; long ans=0; if(2*k<=a.length){ ans+=now^a[n]; ans+=dfs(a,2*k); } if(2*k+1<=a.length){ ans+=now^a[n]; ans+=dfs(a,2*k+1); } return ans; } public long tree5 (int[] a) { // write code here n=0; return dfs(a,1); } }
C++11(clang++ 3.9) 解法, 执行用时: 38ms, 内存消耗: 5008K, 提交时间: 2020-08-09 11:13:46
class Solution { public: vector<int> R; long long ans=0; int n,tot=-1; void DFS(int x,int fa) { int t=R[++tot]; if(fa) ans+=t^fa; if(2*x<=n) DFS(2*x,t); if(2*x+1<=n) DFS(2*x+1,t); } long long tree5(vector<int> &a) { n=a.size(),R=a,DFS(1,0); return ans; } };
Go(1.14.4) 解法, 执行用时: 29ms, 内存消耗: 11048K, 提交时间: 2020-07-30 22:07:28
package main // github.com/EndlessCheng/codeforces-go func tree5(a []int) int64 { n, s, i := len(a), 0, 0 var f func(int) int f = func(p int) int { v := a[i] i++ if p*2 <= n { s += v ^ f(p*2) } if p*2+1 <= n { s += v ^ f(p*2+1) } return v } f(1) return int64(s) }