
牛客编程巅峰赛S1第4场-青铜&白银
发布日期:2021-05-14 23:49:14
浏览次数:23
分类:精选文章
本文共 1027 字,大约阅读时间需要 3 分钟。
整除分块问题
问题描述
给定一个正整数 ( n ),计算从 1 到 ( n ) 的每个整数 ( i ) 的下取整 ( \left\lfloor \frac{n}{i} \right\rfloor ) 的累加和,并将结果对 998244353 取模。
解题思路
将 ( n ) 整除的结果分成若干块,每一块中的整除结果相同。对于每个块,利用块内元素的数量乘以该块整除结果,累加计算总和。具体步骤包括:
- 遍历从 1 到 ( n ) 的每个可能的区间起始值 ( L )。
- 对于每个 ( L ),确定块的终止值 ( R ) 为 ( \left\lfloor \frac{n}{L} \right\rfloor )。
- 计算该块内所有元素的个数乘以对应的整除结果,累加到最终答案中。
解决代码
class Solution {public: int work(long long n) { const long long mod = 998244353; long long ans = 0; for (long long l = 1; l <= n; ++l) { long long r = n / l; ans = (ans + (r - l + 1) * (n / l)) % mod; } return ans; }};
treeI问题
问题描述
给定一棵完全二叉树的 BFS 抄录序列 ( a_i ),恢复二叉树的结构,并利用异或运算对结果进行加密。加密规则如图所示,具体包括每条边的加密方法。
解题思路
通过 BFS 遍历序列 ( a_i ) 从第二个结点开始,逐个计算每个结点与其父节点之间的异或结果,并累加所有异或结果,得到最终加密答案。
解决代码
class Solution {public: long long tree1(std::vector a) { long long ans = 0; for (int i = 2; i <= a.size(); ++i) { ans += a[i - 1] ^ a[i / 2 - 1]; } return ans; }};
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年05月02日 00时58分11秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android判断是否是平板
2019-03-12
C++中的字节对齐,以及空结构体,数组,union类型的实践
2019-03-12
"compileDebugJavaWithJavac"错误解决
2019-03-12
Android系统原理及开发要点详解
2019-03-12
Android基础#22:Android handler用法详解2,例2
2019-03-12
维基百科之AndroidRoot
2019-03-12
SQL语言-DDL、DML、DCL
2019-03-12
android设置输出System.out.println
2019-03-12
powerdesigner中怎么给一主键设为自增型auto_increment.
2019-03-12
import Vue from 'vue'的过程
2019-03-12
ubuntu16.04下系统配置
2019-03-12
电容的分类与用途
2019-03-12
Max9286与max96705通信过程分析
2019-03-12
国内有哪些比较靠谱的云服务器?
2019-03-12
OPPOReno6Pro+和OPPOReno6Pro的区别 哪个好
2019-03-12
小扎扎学测试笔记打卡-数据库测试mysql
2019-03-12
我的第一篇博客 2021-05-10
2019-03-12