且歌且行,眉目轻盈。何妨吟啸且徐|

胖柚の工作室

园龄:2年1个月粉丝:2关注:15

随笔分类 -  洛谷

P1028 [NOIP2001 普及组] 数的计算
摘要:题目链接: 观察样例。当输入 n=6 时,6 本身算一个。当 6 后加的数为 1 时只有一个。6 后加的数为 2 时有 6 2,6 2 1 两个。6 后加的数为 3 时有 6 3、6 3 1 两个。可以看到,我们往 n 后加的每一个不超过 n2 的数都可以
28
0
0
P2580 于是他错误的点名开始了
摘要:题目链接: 方法一、Trie #include <bits/stdc++.h> using namespace std; const int N = 5e5 + 10; int ch[N][26], idx, cnt[N]; void insert(string s) { int p
6
0
0
P3131 [USACO16JAN] Subsequences Summing to Sevens S
摘要:题目链接: 直接暴力的话时间复杂度为 O(n2),显然会 TLE。 #include <bits/stdc++.h> using namespace std; const int N = 5e4 + 10; int a[N], S[N]; int main() { ios:
8
0
0
P3478 [POI2008] STA-Station
摘要:题目链接: 既然让求深度之和,那么我就定义以 i 为根时深度之和为 fi,现在就是思考状态转移的问题。如果以某种手段得到了 f1,那么接下来的转移就好说了。 设 u 为当前节点,j 是当前节点的子节点。si 表示以 i 为根的子树中的节点
6
0
0
P1464 Function
摘要:题目链接: 本题为一道极其经典的记忆化搜索模板题,务必搞懂并掌握记忆化搜索的常见书写格式。 主要思想就是用一个 dp 数组将每一个 w 函数的值存储起来,下一次检查 dp[a][b][c] 的值,如果已经算过就直接调用,可节省大量时间。 #include <cstdio> #
7
0
0
P1002 [NOIP2002 普及组] 过河卒
摘要:题目链接: 从起点走到终点,最后一步一定是向右或向下走过来的,因此就可以列出状态转移方程。值得注意的是,对于横着和竖着的两条边界不可直接想当然地认为路径数一定等于 1,因为在中途可能会有控制点的存在,因此还是要老老实实地列出状态转移方程。由于边界时只会从一个方向递推过来,但是初始时下标从 \
35
0
0
P3654 First Step (ファーストステップ)
摘要:题目链接: 本题数据范围仅为 100,因此可以暴力枚举 O(n3),唯一需要注意的一点就是当 k=1 时,横着站和竖着站是一样的,答案被计算了两次,因此最终的 ans 需要再除以 2。 #include <bits/stdc++.h> const i
14
0
0
P2392 kkksc03考前临时抱佛脚
摘要:题目链接: 这道题的题意容易引起歧义。 举一个 Hack 数据。 2 1 100 2 答案应该为 100 (左脑算 100, 右脑算 2+1+2, 答案是 100)。 第一个科目 有一题,所以我们可以得到: 1、全左脑:耗时 5。 2、
31
0
0
P3392 涂条纹
摘要:题目链接: 第一反应是枚举白色和蓝色、以及蓝色和红色的边界。输入字符数组的同时,预处理出将每一行涂为白色、蓝色、红色所需要的块数。w[i],B[i],R[i] 分别表示将第 i 行涂成白色、蓝色、红色所需的块数。 然后对 w[i],B[i],R[i] 分别求一遍前缀和,白色部
104
0
0
P2036 [COCI2008-2009 #2] PERKET
摘要:题目链接: 本题显然考查 DFS,但需注意是否恢复现场和参数设置的细节。 #include <cstdio> #include <algorithm> const int N = 15; struct Edge { int sour; int sweet; }e[N]; bool s
7
0
0
P2241 统计方形(数据加强版)
摘要:题目链接: 本题其实是一道找规律题,对于 2×3 的棋盘,可以试着找找看 1×2 矩形的个数,不难发现对于 n×m 的棋盘,a×b 的矩形个数为: ① 横着的:(na+1)(mb+1) ② 竖着的(可
11
0
0
P2089 烤鸡
摘要:题目链接: 不要怕太暴力而不敢打() 第一时间想到的其实是深搜,每个位置都有三种选择,考虑完当前位置后再顺次考虑接下来的位置。后来仔细一想,这不就是暴力枚举么!直接十重循环,每次看各个位置上的数之和是否等于 n,时间复杂度为 310 约为 5e4, 因此不会超时。 #
6
0
0
P1618 三连击(升级版)
摘要:题目链接: #include <bits/stdc++.h> using namespace std; int p[10], sum; int main() { int A, B, C; bool flag = false; scanf("%d%d%d", &A, &B, &C); for (int
6
0
0
next_permutation函数
摘要:例题1:P1088 [NOIP2004 普及组] 火星人 如果采用朴素的方法,每次都把火星人的排列初始化为原始排列再计算次数肯定会 TLE #include <bits/stdc++.h> const int N = 1e4 + 5; int a[N], b[N]; int n, m
11
0
0
P1149 [NOIP2008 提高组] 火柴棒等式
摘要:题目链接: 本题比较重要的点在于判断加数的范围,即枚举的范围大小。由于题目已知 n24,且用数字 1 拼成的数尽可能大。由于 1111+1=1112 已经用了 25 根小棒,已经超过了题目 24 根小棒的数据范围,所以上界为 \(1111
13
0
0
P8647 [蓝桥杯 2017 省 AB] 分巧克力
摘要:题目链接: 小巧克力的边长一定在 1105 之间。 答案为在 1105 之间找一个最大的数,使得所有 h[i]/aw[i]/a 的和 k 即可。 #include <cstdio> #include <algori
44
0
0
P1083 [NOIP2012 提高组] 借教室
摘要:题目链接: 本题由于是对某一段区间的数统一进行删除某个数的操作,很容易想到差分。 对于能否二分,有一个界定标准:状态的决策过程或者序列是否满足单调性或者可以局部舍弃性。在本题中,由于随着订单数量的增加,每天可用教室的数量一定单调下降。也即,如果前一份订单都不满足,那么之后的所有订单都不用继续考虑;而
12
0
1
P3799 妖梦拼木棒
摘要:题目链接: 欲由4根木棒组成一个正三角形,则必有2根长度相等,且另外2根长度之和,等于前2根相等的木棒的长度。 由于各木棍的长度 ai5000,时间复杂度 O(n2) 可过。考虑直接用两层循环,暴力枚举上述两种木棒的长度,计算方案数并累加。 外层循环为从长度
29
0
0
P1678 烦恼的高考志愿
摘要:题目链接: 本题容易想到用二分进行优化,但其中有几个细节需要注意一下。 注意点1、特判 if (curr < a[0]) res += abs(curr - a[0]); (该测试点为 m=1,n=100000 且所有数组元素全为 0) 2、可以二分出第一个 \(\geqslant
24
0
0
P1873 [COCI 2011/2012 #5] EKO / 砍树
摘要:题目链接: 一、本题为什么能想到利用二分解决? 1. 有单调性 提高伐木机的高度,显然地,得到的木头会减少。 同样地,放低得到的木头会增多。 而正因为答案有单调性,所以我们可以使用二分。 2. 数据范围大 如果采用暴力枚举,时间复杂度为 O(nm) 会超时。用二
46
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起