C题

简单的公式

https://ac.nowcoder.com/acm/contest/9247/A

一遍dfs赋值 一遍计算异或和
class Solution {
public:
    /**
     * 
     * @param k int整型 表示完全k叉树的叉数k
     * @param a int整型vector 表示这棵完全k叉树的Dfs遍历序列的结点编号
     * @return long长整型
     */
    #define ll long long
ll as[100010],b[100010];
ll kf,cnt=0,n;
void dfs(ll s) //先序遍历
{
    b[s]=as[cnt];  cnt 控制先序遍历下标
    cnt++;
    for(int i=-1*(kf-2);i<2;i++) 
    {
        ll pos=i+s*kf;
        if(pos<=n) dfs(pos);
        else break;
    }
}
ll dfs2(int s)
{
    ll ans=0;
    for(int i=-1*(kf-2);i<2;i++)
    {
        ll pos=i+s*kf;
        if(pos<=n) ans+=(b[s]^b[pos])+dfs2(pos);
        else break;
    }
    return ans;
}
    long long tree6(int k, vector<int>& a) {
        // write code here
    kf=k;
    n=a.size();
    ll res=0;
    for(int i=0;i<n;i++)
    as[i]=a[i];
    if(k==1)
    {
        for(int i=1;i<n;i++)
            res+=as[i-1]^as[i];
        return res;
    }
    else 
    {
        dfs(1);
        ll ans=dfs2(1);
        return ans;
    }
    }

};

全部评论

相关推荐

11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务