合集-题解

摘要:结论 通过计算,可得出当 $n$ % $3=1$ 时,则说明第 $n$ 个苹果将被拿走.其他时候,直接将 $n$ 减去 $n/3$ (向上取整.) 结论过程 代码 #include<bits/stdc++.h> using namespace std; int ans1, ans2, n; int 阅读全文
posted @ 2024-10-22 12:24 Panda_LYL 阅读(131) 评论(0) 推荐(0)
摘要:此题贪心食用更佳 在输入油价的时候,我们边计算油价的最小值和路程和. 当路程之和 $>0$ 时,计算油价并且减去对应路程即可. 注意事项 要开 $long$ $long$ !!!. 代码 #include<iostream> #include<cstdio> #include<cmath> #inc 阅读全文
posted @ 2024-10-22 21:27 Panda_LYL 阅读(104) 评论(0) 推荐(0)
摘要:思路 首先,举一个例子,假如说 小Z 到了入口,但是没到时间,所以没法进去,该怎么办? 当然是等 $k$ 个时间单位呀. 除此之外,像到了其他景区,但是还没开门怎么办 ? 继续等 $k$ 的非负整数倍时间呀. 知道这个后,我们先定义状态 $f_{i,j}$,表示到达点 $i$ 时,路径长度(即时间) 阅读全文
posted @ 2024-10-22 21:33 Panda_LYL 阅读(126) 评论(0) 推荐(0)
摘要:大模拟 此题大模拟即可,只需注意几点: 分母$>0$. 要给根式化简. 分数要约分. 求较大根,那就 $b^2$ 加 $\bigtriangleup $ 即可. 分母 > 0 因为求根公式中,分母中只有 $a$ 一个未知数,所以我们只需保证 $a > 0$ 即可. 所以,当 $a < 0$ 时,我们 阅读全文
posted @ 2024-10-22 21:30 Panda_LYL 阅读(124) 评论(0) 推荐(0)
摘要:代码 #include<bits/stdc++.h> using namespace std; long long a, b, sum = 1; // 开long long int main() { scanf("%lld%lld", &a, &b); if (a == 0 || a == 1) { 阅读全文
posted @ 2024-10-23 12:06 Panda_LYL 阅读(190) 评论(0) 推荐(0)
摘要:解方程 $题目中说,n = pq,ed = (p-1)(q-1)+1,m=n-ed+2.$ $把ed的式子展开,得到:$ $ed = p(q-1)-(q-1)+1$ $ed=pq-p-q+2$ $再把展开后的式子带入m中,得:$ $m=n-(pq-p-q+2)+2.$ $m=n-pq+p+q-2+2 阅读全文
posted @ 2024-10-23 12:08 Panda_LYL 阅读(172) 评论(0) 推荐(0)
摘要:短路 我们可以使用一个变量来记录当前有没有短路. 设变量短路为 $dl$. 当 $dl$ 为 $0$ 时,说明当前值为 $0$,且运算符为 &. 当 $dl$ 为 $1$ 时,说明当前值为 $1$,且运算符为 |. 代码 重点讲完了,细节可以看代码以及注释. #include<iostream> # 阅读全文
posted @ 2024-10-23 12:09 Panda_LYL 阅读(78) 评论(0) 推荐(0)
摘要:最长上升子序列 根据题目中,每个坐标的横纵坐标均单调递增,所以明显可以使用最长上升子序列. 定义状态 $f_{i,p}$,表示正在节点 $i$ 时,还剩下 $p$ 次插入机会,所能达到的最大长度. 定义变量 $dis = |x_i-x_j|+|y_i-y_j|-1.$,表示 $i$ 到 $j$ 节点 阅读全文
posted @ 2024-10-23 12:10 Panda_LYL 阅读(113) 评论(0) 推荐(0)
摘要:结论题 题面概括 请在 $[l,r]$ 中找出一个数 $k$,使得 $n$ % $k$ 的值最大. 思路 当 $n \le 10^9$ 时,说明 $\Theta (n)$ 的算法已经结束了. 所以,接下来是结论推理. 当 $\left \lfloor \frac {l} {n} \right \rf 阅读全文
posted @ 2024-10-23 12:33 Panda_LYL 阅读(99) 评论(0) 推荐(0)
摘要:正解 首先要注意 $2$ 点: 修改数组元素的值 会影响 接下来的操作. 对数组进行排序 不会影响 接下来的操作. 思路 直接扫一遍数组.假设排序后 $a_x$ 会在第 $p$ 位上. 将 $p$ 初始化为 $n$. 然后就开始找 $x$ 前后有多少个小于 $a_x$ 的值就行了. 时间复杂度:$\ 阅读全文
posted @ 2024-10-23 12:35 Panda_LYL 阅读(133) 评论(0) 推荐(0)
摘要:模拟代码 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n, p = 1, ans[1003]; // 没事干的ans数组 struct node{ string op, ad; }a[1 阅读全文
posted @ 2024-10-23 12:36 Panda_LYL 阅读(78) 评论(0) 推荐(0)
摘要:是模拟吗? 其实是的,虽然 $1 \le n \le 2 \times 10^5$,但是队列是个好东西. 我们定义一个结构体,来存放每一个块的信息,包括类型、起点、终点,将它们放入 队列当中,再使用基于广搜的思想,先处理,再合并,所以需要用到 $2$ 个队列. 注意点 数据中可能会有块的类型全是 $ 阅读全文
posted @ 2024-10-23 22:25 Panda_LYL 阅读(205) 评论(1) 推荐(1)
摘要:二进制 "优秀的拆分"如果存在,则代表 $n$ 的二进制最低位不是 $1$. $\because 2^0 = 1$ $\therefore$ 当 $n$ 的二进制最低位为 $1$ 时,不存在优秀的拆分. 即 $n$ 不是奇数. 上述条件判断完后,就可以从 $2$ 的 $30$ 次方开始模拟( int 阅读全文
posted @ 2024-10-23 22:27 Panda_LYL 阅读(193) 评论(0) 推荐(0)
摘要:暴力 使用 $\Theta (n^2)$ 的时间复杂度来解决这题大约能拿到 $60pts$. 即枚举 $p$,再枚举每个选手的分数. 正解 桶是个好东西.我们开一个桶,记录当前分数有多少人. 然后计算获奖人数,分数从大到小进行枚举,直到当前人数 $\ge$ 获奖人数. 代码 #include<ios 阅读全文
posted @ 2024-10-23 22:28 Panda_LYL 阅读(111) 评论(0) 推荐(0)
摘要:短路 这道题目中所含的运算符只有3个:与、或、非. 在与运算和或运算中有2个性质. 进行与运算时,若其中有一个值为0,则这个运算的结果就为0,即无需判断 另1个数是否是0或1. 进行或运算时,若其中有一个值为1,则这个运算的结果就为1,也无需判断 另一个数是否是0或1. 表达式树 根据短路的性质,可 阅读全文
posted @ 2024-10-23 22:31 Panda_LYL 阅读(183) 评论(0) 推荐(0)
摘要:动态规划 dp 方格取数类似于数字三角形,均可以使用动态规划直接秒杀. 但此题有 \(3\) 个方向:上、右、下.所以可以定义一个三维数组 dp 数组. 假设 \(f_{i, j, 1}\) 是从右、上方到达 \((i,j)\) 的和的最大值. 又有 \(f_{i, j, 0}\) 是从右、下方到达 阅读全文
posted @ 2024-10-23 22:33 Panda_LYL 阅读(297) 评论(0) 推荐(0)
摘要:模拟 "公交换乘"按题意模拟即可. 注意:可以使用结构体,但是超过时间的优惠券需要被忽略. 代码 #include<iostream> #include<cstdio> using namespace std; struct node{ int price, deadline, is_use; // 阅读全文
posted @ 2024-10-24 12:12 Panda_LYL 阅读(73) 评论(0) 推荐(0)
摘要:背包 因为小伟可以每天进行 $2$ 种操作 无限 次,所以显然可以使用完全背包. 定义状态 $f_i$,表示还剩下 $i$ 时,可以拿到钱的最大值. 再假设小伟今天买了,明天就卖掉. 状态转移方程如下: $f_i=max(f_i,f_{i-p_{k,i}} + p_{k+1,i} - p_{k,i} 阅读全文
posted @ 2024-10-24 12:13 Panda_LYL 阅读(107) 评论(0) 推荐(0)
摘要:最短路 对于上图,如果我们相知道 $2$ 号工人想要一个 $3$ 阶段的零件,其实是看 $2$ 到 $1$ 有没有一条长度为 $3$ 的路径.但如果要求 $4$ 阶段的路径,那就不一定了. 所以我们直接求一遍最短路,分奇最短路和偶最短路. 处理完后,最后一次 $\Theta (1)$ 的回答,如果路 阅读全文
posted @ 2024-10-24 12:14 Panda_LYL 阅读(94) 评论(0) 推荐(0)
摘要:代码 #include<bits/stdc++.h> using namespace std; string s; int ans = 0; int main() { // freopen("number.in", "r", stdin); // freopen("number.out", "w", 阅读全文
posted @ 2024-10-24 12:17 Panda_LYL 阅读(76) 评论(0) 推荐(0)
摘要:模拟 采用 \(\Theta (N^2)\) 的算法进行去重,最后用 \(52\) 张卡牌减去即可. 代码 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; i 阅读全文
posted @ 2024-10-31 12:19 Panda_LYL 阅读(444) 评论(0) 推荐(0)
摘要:模拟 第一眼,可能有人回想起 dfs. 但因为起点终点,并且走的步数都告诉你了,所以直接模拟就行. 注意 起始点也算被走过,所以可以用一个标记数组,判断当前格子有没有被走过. 代码 #include<iostream> #include<cstdio> #include<cstring> #incl 阅读全文
posted @ 2024-11-01 12:33 Panda_LYL 阅读(1174) 评论(0) 推荐(0)
摘要:更新日志 upd: 2024/11/29, 增加了 100pts 的 dp 做法. 算法一,dp 首先对于 \(10^5\) 的数据,很明显,如果用 long long 是绝对会爆炸的,所以使用 string 类型进行 dp. 定义状态 \(f_i\),表示用 \(i\) 根木棍能拼出的最小数字. 阅读全文
posted @ 2024-11-03 21:17 Panda_LYL 阅读(1497) 评论(0) 推荐(0)
摘要:思路 这道题目很像找 \(2\) 头牛的最近公共祖先,即 lca, 但是并不用那么麻烦. 因为数据很小,我们可以写一个 山寨版 的 lca.具体如下. int mother(string x, string y) { int res = 0; while (y != "") { // 有名字的牛 i 阅读全文
posted @ 2024-11-17 21:58 Panda_LYL 阅读(56) 评论(0) 推荐(0)
摘要:"我"->朋友->朋友的敌人 首先,我们可以知道朋友和敌人的关系可以用图来存储。 设\(g\)为朋友关系所存储的图,\(s\)为敌人关系所存储的东西。 如果所有人都互相握手,那么数量就是\(\frac {n(n-1)} {2}\)。 然后,我们发现\(1 \le n \le 10^6\),所以明显会 阅读全文
posted @ 2024-11-24 21:03 Panda_LYL 阅读(116) 评论(0) 推荐(0)
摘要:暴力搜索 当我们发现 u 很小时,就可以直接暴搜。但我们该怎么搜索呢? 因为是教师送给学生礼物,所以我们先搜索老师,记录下来当前这个老师选还是不选。 当我们选完了 p 个老师,学生部分就可以直接算分数。 先枚举每一个老师,如果当前老师选上了,就去枚举学生,在当前这个学生的贡献中加上幸福度。 为了使幸 阅读全文
posted @ 2024-11-29 21:57 Panda_LYL 阅读(56) 评论(0) 推荐(0)
摘要:暴力 三重循环,枚举学生,障碍和老师,再判断是否合法。 时间复杂度:\(\Theta (mxy)\)。但是会 TLE。 暴力优化 用数组 \(oier\) 来存储二元组 \((x, y)\) 对应的坐标 \(z\)。 这样就省去的开三维数组的成本。 然后只用枚举学生和老师,再判断维度坐标不同数是否为 阅读全文
posted @ 2024-12-15 21:15 Panda_LYL 阅读(50) 评论(0) 推荐(0)
摘要:思路 subtask1 直接暴力搜索即可。 subtask2 普通的 01 背包,直接 \(dp\) 即可。 subtask3 改变 \(dp\) 的状态,设 \(dp_i\) 表示价值为 \(i\) 时用的最小体积,那么就直接在里面找最小值就行。 代码 #include<iostream> #in 阅读全文
posted @ 2024-12-15 21:15 Panda_LYL 阅读(68) 评论(0) 推荐(0)
摘要:思路 因为一棵树的本质是一个图,所以我们可以认为入度为 \(0\) 的节点就是这个树的根。 所以我们统计有几个根,以及是已经作为根的。最后去统计有多少个根就行了。 存储父子关系可以用 unordered_map。 代码 #include<iostream> #include<cstdio> #inc 阅读全文
posted @ 2024-12-15 21:15 Panda_LYL 阅读(81) 评论(0) 推荐(0)
摘要:思路 可以考虑质因数分解,使得最后每一个奇妙数字以及它们的乘积是 \(n\) 的因数。 奇妙数字的定义:\(x=p^a\)。 所以在质因数分解的过程中,我们统计每个质因数有多少,然后统计可以分解成多少个奇妙数字。 代码 #include<iostream> #include<cstdio> #inc 阅读全文
posted @ 2024-12-15 21:16 Panda_LYL 阅读(482) 评论(0) 推荐(0)