随笔分类 -  数学

摘要:本题做法 数学。 思路 本题中,不难发现,一个数的各个数位之和(直到只有个位数),等于它模上 9(但是若它本身就是 9 的倍数,那么就是 9),即:记 \(S(n)\) 为各个数位之和(直到个位数),那么: \[S(n)=\begin{cases}n\bmod 9&\text{if } n\bmod 阅读全文
posted @ 2025-07-09 21:27 2789617221guo 阅读(53) 评论(0) 推荐(0)
摘要:本题做法 数学。 思路 这题需要把上下界 \(L\) 和 \(R\) 分成 2 种情况讨论。 情况 1:\(R-L<n\) 当这种情况时,代表 \(L\) 和 \(R\) 并没有完全覆盖 1 个以上的 2 个相邻 \(n\) 的倍数之间的区间,当发生这种情况时,又要分成 2 种情况来讨论。 情况 1 阅读全文
posted @ 2025-06-27 13:21 2789617221guo 阅读(82) 评论(0) 推荐(0)
摘要:本题做法 数学。 思路 记 \(n=pq\) 为式 1,\(ed=(p-1)(q-1)+1\) 为式 2。 将式 2 展开,得到 \(ed=pq-p-q+2\),移项得到 \(p+q=pq-ed+2=n-ed+2\),正好是数据范围中定义的 \(m\)。 这样,我们就得到了 2 个式子: \[pq= 阅读全文
posted @ 2025-06-26 13:52 2789617221guo 阅读(67) 评论(0) 推荐(0)
摘要:本题做法 位运算。 思路 这题的数据范围使用 int 存储不下,得用 unsigned int。 读入后,我们就要开始考虑如何获取高低位的问题了。 我们都知道,C++ 中的右移运算是可以将一个正整数的二进制右移一位的,我们要忽略后 16 位,我们就可以通过 n>>16 获取高位。 那怎么获取低位呢? 阅读全文
posted @ 2025-04-10 12:53 2789617221guo 阅读(27) 评论(0) 推荐(0)
摘要:本题做法 贪心+排序+双指针 two-pointers。 思路 对于这道题,我们不难发现,当每次跳跃的 \(|h_i-h_j|\) 越大,最后消耗的体力值就越多。 我们可以使用双指针,一个指向开头(即 \(l=1\)),另一个指向结尾(即 \(r=n\))。进行循环 \(i:1\sim n\) 次, 阅读全文
posted @ 2025-03-13 21:26 2789617221guo 阅读(48) 评论(0) 推荐(0)
摘要:本题做法 01分数规划(或许?类似贪心?)。 思路 这题是一道01分数规划的模板题(虽然没有写在标题里)。 本文主要讲解01分数规划的介绍与使用方法。 何为01分数规划? 01分数规划用于解决如下这类问题: 每个物品有2个权值\(a_i\)和\(b_i\),给定这些权值,要求选择\(k\)个物品,使 阅读全文
posted @ 2025-03-02 12:10 2789617221guo 阅读(14) 评论(0) 推荐(0)
摘要:洛谷P1990 覆盖墙壁 题解 题目传送门。 本题是一道非常好的递推题,请认真阅读,争取不看代码自己写出答案。 思路 我们可以设 \(f_i\) 为覆盖 \(2\times i\) 的所有覆盖方案。显然,边界条件 \(f_0\)(即没有列了,不用覆盖)和 \(f_1\)(只有 1 列,即一个 \(\ 阅读全文
posted @ 2025-02-19 20:16 2789617221guo 阅读(82) 评论(0) 推荐(0)
摘要:C++常用代码模板 快速读入 inline int read(){ register int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9' 阅读全文
posted @ 2025-02-18 18:17 2789617221guo 阅读(21) 评论(0) 推荐(0)