牛客编程巅峰赛S1第4场-青铜&白银

大家好,我是小黄呀
@Time:2020/7/18 21:00-22:00
@Host: 牛客网

牛客网题目传送门
数学场。。

组合数第k小

题目大意

在所有的组合数中,给定一个k,返回一个第k小的组合数值。

思路分析

这个题有毒。。。写在函数里,不要习惯的printf,要return(???)

具体代码

class Solution {
public:
    /**
     * 
     * @param k int整型 
     * @return int整型
     */
    int kthSamllest(int k) {
        // write code here
        return k;
    }
};

浅尝辄止

题目大意

给定一个正整数n,求n/i向下取整的累加和,其中i的范围为[1,n],然后将结果mod 998244353,公式如下图。

在这里插入图片描述

思路分析

这个题就是整除分块。更多详细内容

  1. 基本思想就是把n/i得到的商相同的整数分为一块,每一块的范围为(L,R),对于范围内的每一个数,n/i=n/L
  2. 对于每一块范围的求解,从1开始枚举L,R=n/(n/L),然后不断将L=R+1,得到下一块,从而将整个范围内的整除进行分块。

具体代码

class Solution {
public:
    /**
     *
     * @param n long长整型
     * @return int整型
     */
    int work(long long n) {
        // write code here
        const long long mod = 998244353;
        long long l, r;
        long long ans = 0;
        for (l = 1; l <= n; l = r + 1) {
            r = n / (n / l);
            ans += (r - l + 1) * (n / l) % mod;
            ans %= mod;
        }
        return ans;
    }
};

Tree I

题目大意

有一颗n个结点的完全二叉树,给出了它的BFS(即层次遍历)的序列ai,现在需要还原这棵树,并利用异或^运算来进行加密,返回加密后的答案。
加密方法为下图,其中(ui,vi)为一条边。
牛客编程巅峰赛S1第4场-青铜&白银_第1张图片

思路分析

从第二个结点开始遍历,将每个结点与其父节点进行异或^运算,然后将结果累加。

具体代码

class Solution {
public:
    /**
     * 
     * @param a int整型vector 表示这棵完全二叉树的Bfs遍历序列的结点编号
     * @return long长整型
     */
    long long tree1(vector<int>& a) {
        // write code here
        int len=a.size();
        long long ans=0;
        for(int i=2;i<=len;i++)
        {
            ans+=a[i-1]^a[i/2-1];
        }
        return ans;
    }
};

你可能感兴趣的:(#,网赛题解)