随笔分类 -  洛谷题解

摘要:PART 01:思路 我们知道最后的字符串一定是一个左右两边为括号的串,所以先找一波括号。 第一步,找左右括号。 接着在两个括号之间找出两个冒号,所以还要存下左右括号的下标。 第一步,找左右括号并存下下标。 第二步,找左右冒号。 最后在两个冒号之间找 | 字符,所以还要存下冒号的下标。 第一 阅读全文
posted @ 2022-01-26 17:46 Shunpower 阅读(42) 评论(0) 推荐(0) 编辑
摘要:题目传送门 可能更好的阅读体验 思路 很简单的贪心,我们可以把打分的情况分为三种讨论。 显然,如果要使得答案尽量大,就尽量把除最小得分以外的分数都加成最大的分数。我们可以假设要把除最小值、最大值以外的分数都变成最大分需要加 sum 分,这样就可以举出三种情况: 1.sum=m,刚好可 阅读全文
posted @ 2022-01-26 17:44 Shunpower 阅读(185) 评论(0) 推荐(0) 编辑
摘要:题目传送门 可能更好的阅读体验 题目大意 对于一个有向图 G:有 N 个点,M 个边,把每一条边用三元组 (Si,Ti,Wi),其中 Si,ti 表示两个端点,Wi 表示这条边的长度。 如果这个图中从点 1 到点 N 的最短 阅读全文
posted @ 2022-01-26 17:33 Shunpower 阅读(42) 评论(0) 推荐(0) 编辑
摘要:思路解析 这题主要分为两个部分:回文,字符串。 字符串的部分可以使用 C++ 自带的 string 型变量(字符串)进行操作,这题要用到 string 型变量中自带的可以返回字符串长度的length()函数。 回文的部分,我们可以根据题目内对回文的 阅读全文
posted @ 2022-01-26 17:32 Shunpower 阅读(967) 评论(0) 推荐(0) 编辑
摘要:思路 考虑分情况讨论。 我们可以枚举出有一个空格、两个空格、三个空格、全是空格的情况,再跑DFS,可以使用记忆化搜索进行优化。 实现 2.1:编写判断函数 为了判断目前的状态与我们需要的状态是否一致,可以直接写一个 bool 函数判断: bool check(int x,i 阅读全文
posted @ 2022-01-26 17:31 Shunpower 阅读(49) 评论(0) 推荐(0) 编辑
摘要:观前提示:棋盘上的行、一大行都是指的 abc 的一行。一小行则是 1c 的一行。 思路 先初始化出 r 个值表示棋盘第 r 行的开头颜色,用数组 col 进行存储,coli 表示棋盘第 i 行的开头颜色。比 阅读全文
posted @ 2022-01-26 16:59 Shunpower 阅读(71) 评论(0) 推荐(0) 编辑
摘要:思路 欧拉路径的性质在于,起点入度比出度少一(图是一个环除外),终点出度比入度少一(图是一个环除外),其它点的入度和出度相等。 所以我们只要先用 O(m) 读入边,再 O(n) 判定是否有起点和终点即可。值得注意的是,因为欧拉路径每条边必须走且只能走一次,我们有必要在存边的时候,同时 阅读全文
posted @ 2022-01-26 16:59 Shunpower 阅读(74) 评论(0) 推荐(0) 编辑
摘要:思路 把建出来的树进行 DFS,用类似最短路的方法跑出一个视频到每个视频的相关性(下文中用“单源相关性”描述)。为了防止多次跑同一个视频的 “单源相关性”,可以使用一个二维数组记录,第二次询问到这个视频时可以直接读取。 代码 2.1 建树 for(int i=1;i<=n-1;i++){ int x 阅读全文
posted @ 2022-01-26 16:58 Shunpower 阅读(52) 评论(0) 推荐(0) 编辑
摘要:solution-p4380 阅读全文
posted @ 2022-01-26 16:53 Shunpower 阅读(87) 评论(0) 推荐(0) 编辑
摘要:考场上唯一 A 的题,T3 因为没写返回值造成的差异爆掉了。 题意简述 在开区间 (l,r) 取一个数 x 使得 xmodn 的最大。 思路 很容易想到暴力,把 lr 全扫一遍就行,得分 70。 但是可以发现,在 (l,r) 这一段 阅读全文
posted @ 2022-01-26 16:50 Shunpower 阅读(574) 评论(0) 推荐(0) 编辑
摘要:前情提要 考场上写出了这题满分做法(无论是民间数据还是官方数据),可惜少了一句return true;造成 RE……,于是一等奖变三等奖(可能压线二等),Lemon 衷心希望大家不再犯这样的错误写了这篇题解。 思路 考虑分成两个部分,判断合法和连接服务机(或建立连接)。 第二个部分可以通过 STL 阅读全文
posted @ 2022-01-26 16:48 Shunpower 阅读(379) 评论(0) 推荐(0) 编辑
摘要:思路 求最大值,不是二分答案就是贪心。这里很难二分所以考虑贪心。很容易想到贪心策略,从左往右扫,右侧的数 <0 就减,右侧的数 >0 就加,如果右侧的数是 0 无所谓。 考虑证明。对于 2 个数(假设第一个是 x,第二个是 y)的情况明显有: 当 \( 阅读全文
posted @ 2022-01-26 16:46 Shunpower 阅读(48) 评论(0) 推荐(0) 编辑
摘要:这题非常有意思。 思路和代码 首先观察那份 Pascal 代码,由于 Pascal 代码非常好懂,即使是 C++ 党也能轻易看懂,所以这里不再赘述分析过程。我们可以转出下面的代码: for(int i=n-1;i>=1;i--){ cnt++; if(n%i==0){ break; } } cout 阅读全文
posted @ 2022-01-26 16:45 Shunpower 阅读(63) 评论(0) 推荐(0) 编辑
摘要:思路 模拟。 考虑计算字符串中匹配括号的个数。因为每一个匹配括号组一定对应了一个()的子序列,而我们需要使得匹配的括号子序列最多,所以匹配括号的个数一定等于匹配括号子序列的最多个数。 先求一下匹配括号的个数,看看是不是 m 即可。 代码 非常好写。 void solve( 阅读全文
posted @ 2022-01-26 16:44 Shunpower 阅读(30) 评论(0) 推荐(0) 编辑
摘要:思路 考虑先构造数列使得乘积等于 n。 明显地,直接对 n 分解质因数即可。由于这样分解出来的数列具有最小和,所以判断仅由 n 质因数组成的数列和 sumk 的大小关系即可。 如果 sum=k,就可以直接输出了。但是 sum<k 怎么办呢 阅读全文
posted @ 2022-01-26 16:42 Shunpower 阅读(48) 评论(0) 推荐(0) 编辑
摘要:思路 考虑先确定一个数可不可以被报出来。 考虑递归定义布尔函数 f(x) 表示 x 不可以报出来,那么: \[ \begin{cases} 1, &f(x\bmod 10)\land x\bmod 10\neq 7 \\ 1, &\forall y|x\land f(y) \\ 0, 阅读全文
posted @ 2022-01-26 16:40 Shunpower 阅读(110) 评论(0) 推荐(0) 编辑
摘要:前置知识 您需要知道如何求桥,否则请移步 P1656 炸铁路 的 Tarjan 做法。 您需要知道边双连通分量的基本性质。 思路 提示:接下来所有形似“uv 路径的点权和”的描述中,点权和都包括 u,v 的点权。 当火星猫走过一条路之后,这条路就不能再走了 从这句话我们可以想 阅读全文
posted @ 2022-01-26 16:34 Shunpower 阅读(63) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示