牛客编程巅峰赛S2第2场 - 钻石&王者 - B题
已知每个节点的子节点数,bfs遍历即可。
class Solution {
typedef long long ll;
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param k int整型 表示完全k叉树的叉数k
* @param a int整型vector 表示这棵完全k叉树的Bfs遍历序列的结点编号
* @return long长整型
*/
ll sum = 0;
void bfs(vector<int> &a, int k) {
queue<ll> q;
q.push(a[0]);
int s = 1;
while(!q.empty()) {
ll ss = q.front();
q.pop();
if(a.size() - k > s) {
for(int i = s; i <= s + k - 1; i++) {
sum += ss^a[i];
q.push(a[i]);
}
s += k;
}
else {
for(int i = s; i < a.size(); i++)
sum += ss^a[i];
break;
}
}
}
long long tree2(int k, vector<int>& a) {
bfs(a, k);
return sum;
}
};
查看17道真题和解析