前言
这里是我从 2021.4.12 开始的做题记录,每个题目都有大约的讲解思路(
有些偷懒就直接放的题解的链接)这里的每一个题目都没有标程,但是都有题目的链接,可以根据右面的目录点到对应的题目去
这里的题目是按照我做的时间顺序排放的,难度主要是 黄 \(\to\) 绿 \(\to\) 蓝的样子。
非常不要脸的在这里加个目录(虽然貌似洛谷不能识别 TOC 的样子,但是本来就是想让你去博客园看啊ww)
2021.11.29 UPD
- 前言
- 1 | P1144 最短路计数
- 2 | P1352 没有上司的舞会
- 3 | P1015 回文数
- 4 | P1158 导弹拦截[NOIP2010PJ]
- 5 | P1190 接水问题[NOIP2011PJ]
- 6 | P1309 瑞士轮[NOIP2011PJ]
- 7 | P1982 小朋友的数字[NOIP2013PJ]
- 8 | P1095 守望者的逃离[NOIP2007PJ]
- 9 | P2398 GCD SUM
- 10 | P1390 公约数的和
- 11 | P1541 乌龟棋[NOIP2010TG]
- 12 | P3842 线段[TJOI2007]
- 13 | P2016 战略游戏
- 14 | P1359 租用游艇
- 15 | P1122 最大子树和
- 16 | P1747 好奇怪的游戏
- 17 | P1746 离开中山路
- 18 | P2615 幻方[NOIP2015TG]
- 19 | P2298 Mzc和男家丁的游戏
- 20 | P1332 血色先锋队
- 21 | P1141 01迷宫
- 22 | P1162 填涂颜色
- 23 | P1683 入门
- 24 | CF414B Mashmokh and ACM
- 25 | P1586 四方定理
- 26 | AT1350 深さ優先探索
- 27 | P1387 最大正方形
- 28 | P1157 组合的输出
- 29 | P2372 yyy2015c01挑战算周长
- 30 | P1681 最大正方形II
- 31 | P2426 删数
- 32 | P1036 选数[NOIP2002PJ]
- 33 | P1063 能量项链[NOIP2006TG]
- 34 | P1605 迷宫
- 35 | P1005 矩阵取数游戏[NOIP2007TG]
- 36 | P1019 单词接龙[NOIP2000TG]
- 37 | P4170 涂色
- 38 | P2014 选课[CTSC1997]
- 39 | P2015 二叉苹果树
- 40 | P2880 Balanced Lineup G + P2251 质量检测
- 41 | P1816 忠诚
- 42 | P1040 加分二叉树[NOIP2003TG]
- 43 | P1440 求m区间内的最小值
- 44 | P1638 逛画展
- 45 | P1901 发射站
- 46 | P3146 248 G
- 47 | P1714 切蛋糕
- 48 | P6599 异或
- 49 | P4391 Radio Transmission 无线传输[BOI2009]
- 50 | P6051 求和
- 51 | P1083 借教室[NOIP2012TG]
- 52 | P2420 让我们异或吧
- 53 | P1351 联合权值[NOIP2014TG]
- 54 | P1613 跑路
- 55 | P1168 中位数
- 56 | P1853 投资的最大效益
- 57 | P2918 Buying Hay S
- 58 | P5365 英雄联盟[SNOI2017]
- 59 | P2347 砝♂码称重[NOIP1996TG]
- 60 | P1832 A+B Problem 再升级
- 61 | P1244 青蛙过河[NOI2000]
- 62 | P2370 yyy2015c01 的 U 盘
- 63 | P2904 River Crossing S
- 64 | P1631 序列合并
- 65 | P5020 货币系统 [NOIP2018TG]
- 66 | P6771 Space Elevator 太空电梯
- 67 | CF189A Cut Ribbon
- 68 | CF417A Elimination
- 69 | P1941 飞扬的小鸟 [NOIP2014TG]
- 70 | P2938 Stock Market G
- 71 | P1782 旅行商的背包
- 72 | P1858 多人♂背包
- 73 | P1198 最大数[JSOI2008]
- 74 | P1417 烹调方案
- 75 | P1531 I ↑ Hate ↓ It ↑
- 76 | P1883 函数 & UVA 1476 Error Curves
- 77 | P3870 开关 [TJOI2009]
- 78 | P1471 方差
- 79 | P2412 查单词
- 80 | P2434 区间 [SDOI2005]
- 77A | P2574 XOR的艺术
- 77B | SP7259 LITE - Light Switching
- 77C | P2846 [USACO08NOV]Light Switching G
- 77D | P5057 [CQOI2006]简单题
- 81 | P1972 HH的项链 [SDOI2009]
- 82 | P1966 火柴排队 [NOIP2013TG]
- 83 | P4933 大师
- 84 | P2303 Longge 的问题
- 85 | P4145 上帝造题的七分钟 2 / 花神游历各国
- 86 | P1382 楼房
- 87 | P1438 无聊的数列
- 88 | P2257 YY的GCD
- 89 | P2205 [USACO13JAN]Painting the Fence S
- 89A | P2070 刷墙
- 90 | P7075 儒略日 [CSP-S2020]
- 91 | P7076 动物园 [CSP-S2020]
- 92 | P2184 贪婪大陆
- 93 | P5664 Emiya 家今天的饭 [CSP-S2019]
- 94 | P2894 Hotel G [USACO08FEB]
- 95 | P4059 找爸爸
- 96 | P2341 受欢迎的牛 G [USACO03FALL] [HAOI2006]
- 96 | P3718 Alter [AHOI2017]
- 97 | P1896 互不侵犯 [SCOI2005]
- 98 | P2756 飞行员配对方案问题
- 99 | P1330 封锁阳光大学
- 100 | P1129 矩阵游戏 [ZJOI2007]
- 101 | P2740 Drainage Ditches [USACO4.2]
- 102 | P1343 地震逃生
- 103 | SP300 & UVA1660 Cable TV Network
- 104 | P2055 假期的宿舍 [ZJOI2009]
- 105 | P3522 TEM-Temperature [POI2011]
- 106 | P3512 PIL-Pilots [POI2010]
- 107 | P2841 & P1402 & P1231
- 108 | CF438D The Child and Sequence
- 109 | P1659 [国家集训队]拉拉队排练
- 110 | P1345 Telecowmunication[USACO5.4]
- 111 | P1361 小M的作物
- 112 | P2936 Total Flow S [USACO09JAN]
- 113 | P3931 SAC E#1 - 一道难题 Tree
- 114 | P1879 Corn Fields G [USACO06NOV]
- 115 | P4016 负载平衡问题
- 116 | P2512 & UVA11300
- 117 | P2668 斗地主 [NOIP2015 TG]
- 118 | P2071 座位安排
- 119 | P2319 超级英雄 [HNOI2006]
- 120 | P1350 车的放置
- 121 | P1640 连续攻击游戏 [SCOI2010]
- 122 | P2057 善意的投票 [SHOI2007]/冠军调查 [JLOI2010]
- 123 | P2598 狼和羊的故事 [ZJOI2009]
- 124 | P2774 方格取数问题
- 125 | P4001 狼抓兔子 [ICPC-Beijing 2006]
- 126 | P2580 于是他错误的点名开始了
- 127 | P1251 餐巾计划问题
- 128 | P2045 方格取数 加 强 版
- 129 | P2153 晨跑 [SDOI2009]
- 130 | P3980 志愿者招募 [NOI2008]
- 131 | SP3267 DQUERY - D-query
- 132 | P1903 数颜色 / 维护队列 [国家集训队]
- 133 | P1494 小Z的袜子 [国家集训队]
- 134 | P2709 小B的询问
- 135 | P3901 数列找不同
- 136 | P1042 乒乓球 [NOIP2003PJ]
- 137 | P2670 扫雷游戏 [NOIP2015PJ]
- 138 | P1563 玩具谜题 [NOIP2016TG]
- 139 | P1328 生活大爆炸版石头剪刀布 [NOIP2014TG]
- 140 | P3174 毛毛虫 [HAOI2009]
- 141 | P1472 奶牛家谱 Cow Pedigrees [USACO2.3]
- 142 | P1453 城市环路
- 143 | P3205 合唱队 [HNOI2010]
- 144 | P5999 kangaroo [CEOI2016]
- 145 | P1550 Watering Hole G [USACO08OCT]
- 146 | P3535 TOU-Tour de Byteotia [POI2012]
- 147 | P3916 图的遍历
- 148 | P4878 Layout G [USACO05DEC]
- 149 | P3128 Max Flow P [USACO15DEC]
- 150 | P2158 仪仗队 [SDOI2008]
- 151 | CF1559A Mocha and Math
- 152 | CF1559D1 Mocha and Diana (Easy Version)
- 153 | P1108 低价购买 & P2687
- 154 | T189961 [Wdoi R3] 夜雀 dreaming
- 155 | P4310 绝世好题
- 156 | P1944 最长括号匹配
- 157 | P2340 Cow Exhibition G [USACO03FALL]
- 158 | T193697 信号塔
- 159 | CF1560A Dislike of Threes
- 160 | P3868 猜数字 [TJOI2009]
- 161 | P1169 棋盘制作 [ZJOI2007]
- 162 | P4147 玉蟾宫
- 163 | P2051 中国象棋 [AHOI2009]
- 164 | P1578 奶牛浴场
- 165 | P2701 Big Barn [USACO5.3]
- 166 | SP1805 Largest Rectangle in a Histogram
- 167 | UVA1619 Feel Good
- 168 | P2216 理想的正方形 [HAOI2007]
- 169 | P2831 愤怒的小鸟 [NOIP2016TG]
- 170 | P2331 最大子矩阵 [SCOI2005]
- 171 | CF1354D Multiset
- 172 | CF1181D Irrigation
- 173 | P2245 星际导航
- 173 | P3959 宝藏 [NOIP2017TG]
- 174 | P2602 数字计数 [ZJOI2010]
- 175 | P6218 Round Numbers S [USACO06NOV]
- 176 | P4317 花神的数论题
- 177 | P4999 烦人的数学作业
- 178 | P3413 SAC#1 - 萌数
- 179 | P4127 同类分布 [AHOI2009]
- 180 | P4124 手机号码 [CQOI2016]
- 181 | P2518 计数 [HAOI2010]
- 182 | P4768 归程 [NOI2018]
- 183 | P1868 饥饿的奶牛
- 184 | P1341 无序字母对
- 185 | P6722 「MCOI-01」Village 村庄
- 186 | P7113 排水系统 [NOIP2020]
- 187 | P6560 时光的流逝 [SBCOI2020]
- 188 | P4513 小白逛公园
- 189 | P3177 树上染色 [HAOI2015]
- 190 | P2146 软件包管理器 [NOI2015]
- 191 | P2619 Tree I [国家集训队]
- 192 | UVA12888 Count LCM
- 193 | P4981 父子
- 194 | P2590 树的统计 [ZJOI2008]
- 195 | P1265 公路修建
- 196 | P1119 灾后重建
- 197 | P5658 括号树 [CSP-S 2019]
- 198 | P2742 Fencing the Cows [USACO5.1]
- 199 | P2116 城墙
- 200 | P1463 反素数 [POI2001 and HAOI2007]
- 201 | P4643 阿狸和桃子的游戏 [国家集训队]
- 202 | P2863 The Cow Prom S
1 | P1144 最短路计数
P1144最短路计数 [普及+/提高]
由于这道题的特殊性(所有边的边权都是1),所以我们可以只进行简单的BFS
由于要求最短路,所以当前在求的点\(i\)的上一个点在搜索树种一定是来自于上一层,不可能来自同一层,所以到点\(i\)的当前路径的长度只需要让上一层的那个点对他进行更新即可
再因为本题的\(ans\)要求的是到\(i\)点的最短路的个数,所以如果到点\(i\)的当前路径的长度等于上一层的每一个点的路径+1,那么这肯定是到点\(i\)的最短路
2 | P1352 没有上司的舞会
P1352没有上司的舞会 [普及/提高-]
这是我第一次做有关树形DP的题目,因为题目难度不高,所以还是比较好想的
S
设\(f_{i0}\)是当第\(i\)个人不参加舞会时的\(max\),\(f_{i1}\)是他参加舞会时的\(max\)
根据题目所给到的关系,当一个结点(人)的父节点(领导)来的时候,这个人是不参加舞会的,所以对于\(i\)的下属\(j\)就有,\(\begin{cases} f_{i0}=max\{ f_{j0},f_{j1}\} \\ f_{i1}=a_i+f_{j0}\end{cases}\)
这里的\(a_i\)是每个人的欢乐值(结点的权值)
可以显然得到的是,上述柿子只有从根节点开始才能计算出对于每个节点的\(f_{i0} , f_{i1}\),从而才能算出对于根节点的\(f_{root0},f_{root1}\),最后\(ans=max\{f_{root0},f_{root1}\}\)即可
那么我们就需要找到\(root\)的编号,根据本题的特殊性,\(root\)结点即为没有上司的结点,在输入关系的时候我们用一个\(bool\)数组来标记即可,全部输入完毕之后,再根据标记来判断\(root\)
3 | P1015 回文数
P1015回文数 [普及-]
其实做这道题的初衷是为了让橙题AC数量凑个整数
这道题其实按照题目的要求进行模拟即可,每次将一个数的位数正序与逆序相加,需要用到高精。对于大于10进制的情况,将其每一个用字母来表示的位对应的转化为一个十进制数即可
4 | P1158 导弹拦截[NOIP2010PJ]
P1158导弹拦截[NOIP2010PJ] [普及/提高-]
看似这道题是和另外一道DP题重名,实际上这个题是一个排序+模拟,因为只有两个导弹系统,所以我们考虑用第一套拦截较小范围的,第二套拦截较大范围的
在用到第一套系统的距离进行排序,然后依次枚举即可
5 | P1190 接水问题[NOIP2011PJ]
P1190接水问题[NOIP2021PJ] [普及-]
这题就真的是老水题了,模拟一下接水过程即可
6 | P1309 瑞士轮[NOIP2011PJ]
P1309瑞士轮[NOIP2011PJ] [普及/提高-]
这道题是一个很典型的归并排序
主要思路就是每次维护赢家和输家两个数组,然后在每次比赛之后进行归并
在最一开始使用sort排序一遍,然后每次比赛完之后merge即可
PS:STL中是有merge的:
merge函数的作用是:将两个已经排好序的序列合并为一个有序的序列
函数参数:merge(first1,last1,first2,last2,result,compare);
实际上就可以这样用:
inline bool cmp(int x,int y){return x<y;}
int a[114514],b[114514],c[114514];
...
merge(a+1,a+114514,b+1,b+114514,c+1,cmp);
7 | P1982 小朋友的数字[NOIP2013PJ]
P1982小朋友的数字[NOIP2013PJ] [普及+/提高]
我直接推荐第一篇题解
8 | P1095 守望者的逃离[NOIP2007PJ]
P1095守望者的逃离[NOIP2007PJ] [普及/提高-]
能闪则闪,否则就走,若能力值够了就恢复,最后将本次的值进行比对,
看是这次 走 快还是 停下来恢复 或 闪 快
9 | P2398 GCD SUM
设\(f_i=\gcd(i,j)=k\)
\(g_k\)为能被k整除的\(\gcd(i,j)\)的个数
很明显就有\(g_k=\sum\limits_{t=1}^nf_{t*k}\),因此\(g_k=\lfloor\frac{n}{k}\rfloor^2\)(对于i有floor(n/k)种,对于j也一样)
10 | P1390 公约数的和
思路和上一题基本一致,最后答案输出时\(\frac{ans-k}{2}\)即可,其中\(k=\frac{n(1+n)}{2}\)
11 | P1541 乌龟棋[NOIP2010TG]
P1541乌龟棋[NOIP2010TG] [普及+/提高]
很明显的一个DP题,且方程是比较好推的
由于题目中说了一共只有4种卡牌,且对于100%的数据:每种牌的数量都小于等于40
因此我们可以开4维数组,\(f_{xyzw}\)代表分别用x张1,y张2,z张3,和w张4所能得到的最大值
那么就可得出方程:
当然,前提是保证计算\(x-1,y-1,z-1,w-1\)时,对应的\(x,y,z,w\)都不为0
12 | P3842 线段[TJOI2007]
P3842线段[TJOI2007] [普及/提高-]
DP,在这里是设置了二维的一个状态,\(f_{i,0}\)表示从第i行最左端开始走的最短路径长度,\(f_{i,1}\)则是到第i行最右端开始走的最短路径长度
那么除了第一行外,当前的从左端点开始走的最短的路径就是上一行的对应的左端点+上一行的线段的左端到这一行的线段的右端的长度+这一行的线段长度+1。或者是从上一行的右端点来(计算方法同理,将左端点改为右端点即可)。
当然,从右边开始同理。
那么状态转移方程就是这样的:
13 | P2016 战略游戏
P2016战略游戏 [普及/提高-]
一个最为基础的树形DP
通过观察样例我们可以发现:实际上只需要考虑对于某个节点,我们只需要考虑这个节点要不要放士兵即可
那么我们每次取放/不放的最小值即可
14 | P1359 租用游艇
P1359租用游艇 [普及-]
树形DP,先存边,然后遍历n的上游和i的下游节点,比较路径长度即可
15 | P1122 最大子树和
P1122最大子树和 [普及/提高-]
树形DP,先存边,然后进行两个DFS
16 | P1747 好奇怪的游戏
P1747好奇怪的游戏 [普及/提高-]
BFS,做这道题的初衷是为了复习一下搜索,感觉自己快忘了
最一开始提交竟然WA,原来是BFS第二个时把BFS(X2,Y2)错写成了BFS(X2,Y1),草(一种植物+中日双语)
17 | P1746 离开中山路
P1746离开中山路 [普及/提高-]
BFS,和上面那道题基本一致
简单的打了一遍模板,修改几个参数就好了(
18 | P2615 幻方[NOIP2015TG]
P2615幻方[NOIP2015TG] [普及-]
不是吧2015年的D1T1就这么水
做题的初衷是为了完成任务
一眼知模拟,所以就按照条件简单做就行
因为数组表示起来不是很好想,直接放弃使用数组下标
选择用结构体,求每个数字的坐标,最后再赋值给数组以便输出,中间走样例炸了一次,是没做位置是否有数的判断,因为懒得再去大改,而且这题范围允许,就维护了一个bool数组
做的时候觉得应该能煺柿子,AC完一看题解,还真有公式啊
19 | P2298 Mzc和男家丁的游戏
P2298Mzc和男家丁的游戏 [普及/提高-]
BFS,和前面的P1746思路基本一致,典型的迷宫+BFS,维护一个dis数组即可
但是分析的时候错误的打了个else导致我调了二十分钟???
20 | P1332 血色先锋队
P1332血色先锋队 [普及/提高-]
看完题面第一反应:好!我是叛徒
BFS,但不完全是BFS板子,这是多起点多终点的
啊那就直接把起点全部压进队列去不就行了么
然后更新dis,最后按照顺序输出即可
然后我因为BFS函数没调用查了≈40min???
感谢!已经气懵了
21 | P1141 01迷宫
P1141 01迷宫 [普及-]
别看这是一道普及-,这题可比前面的5道题强多了
首先输入需要用字符串,迷宫类问题常规操作,还行
然后这题如果直接按照输入数据一组一组的BFS的话最多拿70pts,会TLE三个点
那么我们考虑计算连通块,然后输出要查询的点所在的连通块的大小即可
22 | P1162 填涂颜色
P1162填涂颜色 [普及-]
哦,又是一道普及-
这道题做法很多,我在这里考虑DFS
因为在题目当中0有两个意思,所以将他们换成不同的数字在进行分析
但是不能直接DFS,那样会把边缘误涂,应该先DFS一边边缘,再进行正常DFS,所以最一开始输入的是DFS(0,0)
23 | P1683 入门
P1683入门 [普及-]
哦,双是一道普及-
这道题显然的DFS,甚至还不用回溯,找到起点直接DFS即可
24 | CF414B Mashmokh and ACM
洛谷:CF414B Mashmokh and ACM [普及/提高-]
CF:Codeforces Round #240(Div.1) ##B
搜索做累了,水一个DP
由于对于一个数而言,它的因数并不好枚举,所以在这里考虑倒退,即去推某个数的倍数
25 | P1586 四方定理
P1586四方定理 [普及/提高-]
DP,状态很好想,是一个类似部分背包
由于是多组数据,可以先预处理,然后把输入的数据的f[n][1~4]加起来就行
26 | AT1350 深さ優先探索
AT1350 深さ優先探索 [普及/提高-]
顾名思义,这是AtCoder的DFS模板题,锻炼一下DFS用的
27 | P1387 最大正方形
P1387最大正方形 [普及/提高-]
智能推荐的题,DP
由于给了图,而且n和m都小于100,所以上手模一下图大概的柿子就有了
本题实际上只需要对数值是1的点进行操作,所以以当前这个点为顶点的最大的不含0的正方形的边长就是它的上,左,左上端点的最小值再加一,柿子大约就是:
28 | P1157 组合的输出
P1157组合的输出 [普及-]
DFS,但是我白给了,完全不会DFS.jpg
实际上思路很好想,从1开始搜,然后搜每一个能符合的下一个数,如果当前搜到的位数大于r了,就输出+回溯
但是我就是不会打(
最一开始看到这个题突然想起来有个东西叫做next_permutation,然后看本题的推荐题目,发现有一道裸的输出全排列(P1706全排列问题 [普及-]),就顺便用这个STL函数搞了一下
29 | P2372 yyy2015c01挑战算周长
哦我又双叒叕在DFS上面白给了
P2372yyy挑战算周长 [普及-]
DFS,一上来就读不懂题,样例都看不懂
看了一眼题解发现原来是对于每个中心的X,只有它的上下左右才算周长,否则不算(比如说角上就不算)
30 | P1681 最大正方形II
P1681最大正方形II [普及/提高-]
是刚才上面那道题的变式,实际上只需要多开一维数组来表示当前是0还是1了
这个数据范围搞得我严重浪费评测机资源
31 | P2426 删数
P2426删数 [普及/提高-]
区间DP,我没见过
准确来说是我忘了,但是看题解说这个题比较水
不过也确实比较水,因为从头上删除和从尾删除到了最后应该是等价的(也就是从头上删除的最优解留下来的部分也正是从尾端开始的最优解)
最一开始过不了样例,因为我把求值的公式打错了(谁让题面上没用\(\LaTeX\)呢)
看到样例答案突然就想讽刺一下膏通的某挤牙膏SoC
32 | P1036 选数[NOIP2002PJ]
P1036组合的输出 [普及-]
一道NOIP的上古题目
DFS,和昨天那个组合数类似,都是确定当前数字的基础上确定下一个数
本来是想打一手欧拉筛预判一下,结果发现不是很好用,于是乎打完就去掉了,换成了试除法
33 | P1063 能量项链[NOIP2006TG]
P1063能量项链[NOIP2006TG] [普及+/提高]
众所周知这是某本书的区间DP的例题,但我没看那本书的区间DP
好久没做绿题了
区间DP,首先这题数据是个环,我们需要破环成链,实际上只需要在数组里面再复制一遍数据就可以
我们从中间选一个点k,然后每次比较i到j的原值大还是从中间选一k点得到的值大
最后找一个最大值即可
34 | P1605 迷宫
P1605 迷宫 [普及-]
不是吧不是吧不会这个题也有人不会吧
Dfkuaid_First_Search,实际上就是每次扩展结点简单DFS即可
但是我最一开始忘了判断是否越界&起点设置为已经过而WA
说明我DFS还是8行
35 | P1005 矩阵取数游戏[NOIP2007TG]
P1005 矩阵取数游戏[NOIP2007TG] [提高+/省选-]
终于是把我主页智能推荐天天在推荐的题调出来了
实际上是一个区间DP,我们每行维护一个最大值,最后加起来即可
对于每一行的每一个数,当要去掉的数到它时,它的最大值一定来自它的左边或右边,因为只能从两头进行操作
然后就是高精度,感谢,已经快敲死了
实际上第一次模着题解写对了99%,但是当把每一行的最大值加入ans的时候忘了给每一行的最大值赋值时清空了