牛客编程巅峰赛S1第4场 - 青铜&白银
A-组合数第k小
https://ac.nowcoder.com/acm/contest/6221/A
牛牛想知道在所有不同的组合数值中,第k小的组合数值是多少呢。给定一个k,返回第k小的组合数值。
C++
这就不用多讲了吧,组合数从1-1e9都有。
class Solution {
public:
/**
*
* @param k int整型
* @return int整型
*/
int kthSamllest(int k) {
// write code here
return k;
}
};
B-浅尝辄止
链接:https://ac.nowcoder.com/acm/contest/6221/B
来源:牛客网
C++
这道题首先要推理出一个坐标公式n/(n/i)
表如下:
会发现这个坐标内的数字都是相同的,因为向下取整,所以除数的整数部分结果都是相同的。
class Solution
{
public:
/**
*
* @param n long长整型
* @return int整型
*/
int work(long long n)
{
// write code here
long long sum=0;
long long l,r;
for(l=1; l<=n; l=r+1)
{
r=n/(n/l);
sum+=(n/l)*(r-l+1);
sum%=998244353;
}
return sum%998244353;
}
};
C-Tree I
https://ac.nowcoder.com/acm/contest/6221/C
了解一下完全二叉树的性质,就可以知道(a[i], a[2i]) 和(a[i],a[2i+1]) 是树上的边。
class Solution
{
public:
/**
*
* @param a int整型vector 表示这棵完全二叉树的Bfs遍历序列的结点编号
* @return long长整型
*/
long long tree1(vector<int>& a)
{
long long ans=0;
for(int i=2; i<=a.size(); i++)
ans+=a[i-1]^a[i/2-1];
return ans;
}
};