随笔分类 - 题解
题解
摘要:好妙啊!这道题让我大开眼界! 写一篇题解加深一下印象。 思路 我重点对把原问题建模成一个树上问题的部分进行补充。 最开始读题的时候没有看到最多只跳过一个棋子,没想到这竟然是突破口。 我们假设一个状态 \((x, y, z)\),不妨设 \(x \le y \le z\)。 考虑它能怎么变化?这里为了
阅读全文
摘要:思路 容易想到是个动态规划。首先设 \(f_i\) 表示字符串前 \(i\) 个字符所组成的字符串的答案。状态定义好了,接下来就是考虑如何转移了。因为由 \(f_i\) 可以得到所有 \(f_j\),其中 \(i+j\le len\),转移方程为 \(f_i=f_j+x\),其中 \(x\) 为 字
阅读全文
摘要:思路 我们把关系想成一张图,每次输入就给两个人连一条边。 因为一个人只有两种选择,所以我们在一个联通块内随便找一个点,跑一遍搜索,找出这个联通块内的答案。代码如下。 void dfs(int u,int color) { cnt2++;// cnt2是这个连通块内的总点数 cnt1+=color;/
阅读全文
摘要:思路 这里提供一种暴力做法。方法就是当边数到达一个值过后就不加边了。我取的值是 \(500000\),实际上可以开大一些,只要 \(x \log x\) 不超时就行了。 代码 赛时提交记录 #include <bits/stdc++.h> using namespace std; #define i
阅读全文
摘要:题意 在长为 \(n\) 的序列 \(a\) 中 找出 \(k\) 个数,设它们的下表为 $p_1 \(,\)p_2$ 到 \(p_k\),满足这 \(k\) 个数从小到大排列过后是一个公差为 \(1\) 的等差数列。求满足条件的 \(k\) 个数的最大的 \(p\) 减去 最小的 \(p\) 最小
阅读全文
摘要:CF1859A题解 思路 考虑一种极端情况,\(b\) 数组内的数全部比 \(a\) 大,这样也无法整除,所以这就是这道题的突破口。我们让 \(b\) 数组内的数全部比 \(a\) 里的大,最方便的实现方法就是把原数组内的最大的数放进 \(b\) 数组,剩下的放进 \(a\) 数组。注意特判无解情况
阅读全文
摘要:思路 拿到这道题,第一时间肯定想到是 \(dp\) 题目。 朴素 DP 用 \(dp_i\) 表示序列和为 \(i\) 的序列个数。因为原数组由奇数组成,所以 \(dp\) 只可能由 \(dp_{i-1}\),\(dp_{i-3}\) 等等转移过来,若 \(i\in A\),\(dp_i=0\)。即
阅读全文
摘要:题意 在长为 \(n\) 的序列 \(a\) 中 找出 \(k\) 个数,设它们的下标为 \(p_1\),\(p_2\) 到 \(p_k\),满足这 \(k\) 个数从小到大排列过后是一个公差为 \(1\) 的等差数列。求满足条件的 \(k\) 个数的最大的 \(p\) 减去 最小的 \(p\) 最
阅读全文
摘要:链接 如果只是扫一遍肯定是不行的,所以我们使用一个栈,遇到 C 就判断栈顶的两个元素是不是分别为 B 和 A。这样就能做出来这道题了。 代码 #include<bits/stdc++.h> using namespace std; string s; char stk[200010]; int ma
阅读全文
摘要:Hello World 链接 这道题是一个很明显的前缀和,我们把 $sum_i$ 表示为前 $i$ 个字符有多少个有重复,查询的时候就用 $sum_{r-1}-sum_{l-1}$ 就行了。 代码 #include<bits/stdc++.h> using namespace std; string
阅读全文
摘要:分析 这题是一个很水的题,就是对一个序列有 $2$ 种操作方法,一种是对第 $K$ 个数以前的数的第一个进行删除,另一个则是在整个序列后添加这第 $K$ 个数,使得整个序列为同一个数字,显然,后者是无效操作,则只需要判断第 $K$ 个数以后有无与第 $K$ 个不同的数,有则无解,反之有解。若有解,然
阅读全文
摘要:题目链接 题目思路 这个问题要求找到一个半开区间,使得在这个区间内包含尽可能多的礼物。首先,我们需要将输入的礼物坐标按照从小到大的顺序进行排序。然后,我们可以使用双指针的方法来寻找最佳的区间。 代码 以下是代码解释: #include<bits/stdc++.h> using namespace s
阅读全文
摘要:题目链接 题意简述 给出若干条平面上线段,找出最大的正+形边长多少。 思路 不难,但是判断两直线相交要考虑全面。数据不大不多,暴力直接过了。 代码 #include<bits/stdc++.h> using namespace std; typedef struct line { int sx,sy
阅读全文
摘要:题目链接 解法分析 这个问题是一个经典的排列谜题,通过回溯算法来穷举所有可能的字符排列,然后验证是否满足行和列约束。这个解决方案可以用于解决类似的谜题,其中需要满足一定的排列条件。通过仔细考虑约束条件,可以加快解决问题的速度,减少不必要的计算。 更详细的我写在代码里了。 代码 #include <b
阅读全文
摘要:链接 这道题卡了我 $40$ 多分钟。 其实就是跑两遍广搜,第一遍算出每个点距离树的最小距离,第二遍开个优先队列,算出逃回窝的途中最大可能的离它最近的树的距离的最小值。 接下来重点讲一下第二遍广搜。 首先,我们要知道,如果我们用 queue ,那么最先到的点不一定是最优的。 所以,我们需要用 pri
阅读全文
摘要:P2678 跳石头 链接 这道题其实很水 我们二分最长距离,最后用 $check$ 函数 判断合不合法 一下是核心代码 $check$ 函数这样写: bool check(int x){ int last=0,tot=0; for(int i=1;i<=n;i++){ if(a[i]-last<x)
阅读全文
摘要:CF1552D题解 思路 首先,$a_i$ 的正负不重要,如果 $a_i=b_j-b_k$,那么就有 $-a_i=b_k-b_j$,读入时将 $a_i$ 全部转化为正数。 若满足 $a_i+a_j+\ldots+a_k$,那么就可以构造出 $b$ 序列,否则不行。 从左到右遍历一遍 $a$ 序列,动
阅读全文
摘要:CF985C题解 思路 由题意得知,现在有 $n\times k$ 块木板需要组装成 $n$ 个木桶,每个木桶由 $k$ 块板组成,容量服从短板原理,要求容量差不得超过 $I$,求最大容量和。 不管采用什么方法,无疑我们首先需要将板长(数组 $a$)从小到大排列。 利用贪心算法。先找出与 $a_0$
阅读全文

浙公网安备 33010602011771号