洛谷从零单刷
这是我用来学习算法的专栏,将会把我从零开始刷洛谷试炼场的每一题记录下来,帮助之后的同学刷试炼场
NJU_SE_WaterWan
这个作者很懒,什么都没留下…
展开
-
普及练习场 普及常见模板 【模板】线性筛素数
题目链接:https://www.luogu.org/problemnew/show/P3383题意理解显然是用来验板子的代码#include #include #include #include #include #include #include #include using namespace std;/** 素数筛选,判断小于MAXN的数原创 2018-01-28 13:04:00 · 4699 阅读 · 0 评论 -
普及练习场 普及常见模板 【模板】单源最短路径
题目链接:https://www.luogu.org/problemnew/show/P3371题意理解这就是用来验板子的题目,讲真我这套代码跑的飞快,最大的点也就96ms我这套代码勉强能用吧。。代码#include // 注意点和边是从0开始编号的,如果不一样,需要修改const int inf = 0x3f3f3f3f;// 点的最大数,开数组用const原创 2018-01-31 11:23:18 · 4120 阅读 · 0 评论 -
提高历练地 搜索Ex 小木棍[数据加强版]&&油滴拓展
https://www.luogu.org/problemnew/show/P1120 https://www.luogu.org/problemnew/show/P1378 小木棍这题可以考虑用数组记录每个长度的小木棍的数量。求出木棍长度和,然后从最长的小木棍长度到总长度一半,枚举所有可能。油滴这题,是《算法艺术与信息学竞赛》上的题目。需要注意的一点是,如果某个点还没有油滴,那么别的油滴...原创 2018-02-12 17:13:27 · 674 阅读 · 0 评论 -
提高历练地 搜索Ex 引水入城
题目链接:https://www.luogu.org/problemnew/show/P1514题意理解第一排可以建蓄水厂和输水站。其他排只能建输水站。最后一排必须每座城市都建一个输水站。对于不能满足的情况,我们可以考虑在第一排建满蓄水站,然后数一下最后一排有多少个没有水利设施的。我选择使用dfs,应该也可以用bfs。对于能满足的情况,如果使用全排列做,复杂度会炸。然后观察可以...原创 2018-02-20 16:51:14 · 726 阅读 · 0 评论 -
提高历练地 搜索Ex Mayan游戏
题目链接:https://www.luogu.org/problemnew/show/P1312个人见解这题用搜索去做,会发现状态的恢复有点烦,就可以考虑将状态作为参数传进去,这样就不需要修改再恢复了,而是利用语言特性。。参考代码直接看这份代码就行了:http://blog.csdn.net/cqbztsy/article/details/47342903...原创 2018-02-24 19:10:33 · 968 阅读 · 0 评论 -
普及练习场 BOSS战-普及综合练习2 立体图
题目链接:https://www.luogu.org/problemnew/show/P1058参考博客链接:https://www.luogu.org/blog/ahzxp/solution-p1058题目理解要找出L, K和m, n的关系。这个其实是比较复杂的。对于L,我们可以画出边界位置,然后验证,而K是一个动态的,就很麻烦。。。不过可以在样例的基础上进行修改,可以观察出结原创 2018-01-26 20:46:42 · 4775 阅读 · 0 评论 -
BOSS战-普及综合练习3 生活大爆炸版石头剪刀布
题目链接:https://www.luogu.org/problemnew/show/P1328题意理解这个就是拓展了石头剪刀布规则的游戏,本质上还是打表。然后由于数据量的原因,可以直接暴力循环,而不需要求最小公倍数去计算。代码import java.io.BufferedReader;import java.io.InputStreamReader;impor原创 2018-01-27 21:58:08 · 3946 阅读 · 0 评论 -
BOSS战-普及综合练习3-积木大赛
题目链接:https://www.luogu.org/problemnew/show/P1969题意理解很容易发现:如果一个数列,先递增,再递减,或者只有递增(递减),那么操作次数就是其中的最大值。然后很容易观察出,结果与若干个极大值减去极小值的和有关。为了更方便理解,可以在最前面加一个0。那么必然就是一个极小值对应一个极大值。至于最后一段如果极大值后面还有数字,那么是不影响结果的原创 2018-01-27 22:42:01 · 3730 阅读 · 0 评论 -
BOSS战-普及综合练习3-数列
题目链接:https://www.luogu.org/problemnew/show/P1062题意理解1∗301∗31+0∗301∗31+1∗301∗32+0∗31+0∗30" role="presentation" style="position: relative;">原创 2018-01-28 09:56:09 · 4488 阅读 · 0 评论 -
普及练习场 普及常见模板 【模板】最小生成树
题目链接:https://www.luogu.org/problemnew/show/P3366题意理解给出一个无向图,求出最小生成树。这就是给用来验板子的代码#include #include #include #include #include #include #include #include #include using namespa原创 2018-01-28 11:20:12 · 4523 阅读 · 0 评论 -
普及练习场 贪心EX 皇后游戏
题目链接题意理解显然,第i+1i+1 位大臣拿的钱比第ii 位大臣多记i−1i-1位大臣拿的钱为ci−1c_{i-1} ,第ii 位大臣和第i+1i+1位大臣拿的钱可以分别表示出来。此时顺序是,i−1,i,i+1i-1, i, i+1 ①然后交换第ii 位大臣和第i+1i+1位大臣。此时顺序是i−1,i+1,ii-1, i+1, i②此时我们希望第i+1i+1位大臣排在后面原创 2018-01-16 23:11:35 · 1230 阅读 · 0 评论 -
普及练习场 贪心EX 木棍加工
题目链接题意理解我第一眼感觉就是,这跟导弹拦截差不多啊,看懂导弹拦截就好了。代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringToken原创 2018-01-16 23:18:12 · 2244 阅读 · 0 评论 -
普及练习场 简单数学 A % B Problem
题目链接题意理解对于[l,r][l,r] 之间的素数个数,只要知道[0,l)[0, l) 之间的素数个数和[0,r][0,r] 之间的素数个数就可以了。此题可以用来验素数筛的板子。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWr原创 2018-01-16 23:22:11 · 3162 阅读 · 0 评论 -
普及练习场 简单数学 又是毕业季I
题目链接题意理解看完代码你想想就知道答案了。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { public static void main(String[] args)原创 2018-01-16 23:24:08 · 3487 阅读 · 0 评论 -
普及练习场 简单数学 末日的传说
题目链接题意理解感觉这不是数学题,是一个贪心。从1开始考虑,如果放在最后,那么就有N−1N-1 个逆序对是以1为后边的,如果放前面,那么就有0个。然后同样是个数相同的逆序对,逆序越靠后,数字越小,因为靠前面的数字影响要大一些。所以我在写题解的时候,想到应该从后往前贪计算更简单一些。应该可以不需要计算那个temp了。如果有谁这么写并且写对了可以联系我一下:)代码imp原创 2018-01-16 23:32:40 · 3922 阅读 · 0 评论 -
普及练习场 简单数学 [SDOI2008]仪仗队
题目链接题意理解假设起点是(0,0)(0, 0)。首先证明,(x,y)(x, y) 所在的点如果被挡住,那么一定gcd(x,y)=1gcd(x,y)=1 ,否则假设gcd(x,y)=dgcd(x,y)=d ,会有(xd,yd)(\frac{x}{d} , \frac{y}{d}) 挡住视线。然后根据图,右上到左下把图分成两半。然后显然,第ii 排能看到的点的个数是横纵坐标互质的点,纵坐原创 2018-01-16 23:42:49 · 3231 阅读 · 0 评论 -
普及练习场 BOSS战-普及综合练习1 幻想迷宫
题目链接题意理解这题非常坑爹,因为Java跑的真的太慢了。主要就是一个深搜/广搜,虽然我深搜没过掉。。。这条题目是说,把给定的迷宫复制若干份,比如说原来的迷宫是这样的:S00011112222复制若干份是说:S000|S000|S0001111|1111|11112222|2222|2222--------------S000|S000|S000原创 2018-01-16 23:59:12 · 4203 阅读 · 0 评论 -
普及练习场 BOSS战-普及综合练习2 守望者的逃离
题目链接:https://www.luogu.org/problemnew/show/P1095题意理解这题其实最近做过一条差不多的,吃鸡跑毒那条。但是还是不一样。由于考虑的是最短时间和最长路程,根据数字的大小来看,表示每一时刻能跑的最长路程,应该是最靠谱的,并且也符合题目要求。那么如何表示每个时刻能跑的最长路程呢?可以考虑暴力搜索,但是看看这个T大小,好像不是很好做。第一步应该想到,一开始是全部都原创 2018-01-25 20:47:21 · 5285 阅读 · 0 评论 -
普及练习场 动态规划的背包问题 开心的金明
题目链接题意理解这题只要把价格乘以重要度,就变成了01背包。然后01背包是有套路的。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { static int N, m;原创 2018-01-13 20:57:29 · 188 阅读 · 0 评论 -
普及练习场 动态规划的背包问题 小A点菜
题目链接题意理解记dp[i]dp[i] 表示ii元可以点菜的方案数。对于dp[0]=1dp[0]=1 ,表示没钱的时候只能不点菜。假设一道菜的价格是a元,那么对于任意的j≥aj \ge a ,有dp[j]+=dp[j−a]dp[j] += dp[j-a]代码import java.io.BufferedReader;import java.io.InputStrea原创 2018-01-13 21:12:33 · 387 阅读 · 0 评论 -
普及练习场 动态规划的背包问题 金明的预算方案
题目链接题意理解首先说一下,这道题目我简直WA疯了。WA点主要有这么几个:细节。在输入的时候,如果q>0,那么这时候应该是第q个货物的附加货物。关键部分。状态转移方程少掉了一个状态。这个题目应该有四个状态转移方程:只选主货物;选主货物与第一个附加货物;选主货物与第二个附加货物;选主货物与第一个附加货物与第二个附加货物。我漏掉了这个状态。关键部分。状态转移方程写错了。实际上原创 2018-01-13 21:25:18 · 267 阅读 · 0 评论 -
普及练习场 线性动态规划 导弹拦截
题目链接题意理解这道题目第一问是要求出,最长的非上升子序列的长度。第二问可以用到结论:对于一个偏序集,其最少链划分数等于其最长反链的长度。此时只需要求出最长非下降子序列的长度。可以参考这篇文章。于是,这条题目就变成了两次DP。对于DP,可以参考这篇文章。这题细节有点多,对于大于小于号需要对于状态有着正确的理解才行。代码import java.io.B原创 2018-01-14 16:48:49 · 401 阅读 · 0 评论 -
普及练习场 线性动态规划 合唱队形
题目链接题意理解这道题目数据范围非常小,所以是可以使用O(n2)O(n^2)算法的。直接正着DP再反着DP,最后求和减一,得到最大的值就是最后留下来的人数。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public原创 2018-01-14 17:14:12 · 393 阅读 · 0 评论 -
普及练习场 线性动态规划 尼克的任务
题目链接题意理解这道题目如果从后往前推,那就比较简单。状态转移方程直接看源代码。其中dp[i]dp[i]表示第i分钟时可以休息多久。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main原创 2018-01-15 00:53:16 · 248 阅读 · 0 评论 -
普及练习场 线性动态规划 石子合并
题目链接题意理解首先这道题目不能用这样的贪心来做:对于环中的和最小的两个石子堆,先合并。因为这样做可能会导致在有的时候,不止一个和最小的两个石子堆,你在这里合并了之后,会影响后继的合并状态。这与之前可以用贪心写的不一样,是因为之前是可以任意合并两堆石子,而这里是环形中可以合并相邻的两堆石子。然后需要注意一下断环成链的技巧。注意点大部分都写到注释里面了。代码import原创 2018-01-15 00:58:34 · 449 阅读 · 0 评论 -
普及练习场 多维动态规划 Likecloud-吃、吃、吃
题目链接题意理解这个和数字金字塔真的是一样的,就是拓展的方向多了一个。。。代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main {原创 2018-01-15 01:01:22 · 260 阅读 · 0 评论 -
普及练习场 多维动态规划 传纸条
题目链接题意理解用dp[i][j][i1][j1]dp[i][j][i1][j1]表示来的时候从[i][j][i][j] 走,回去的时候从[i1][j1][i1][j1] 走的最大和,那么只要来回不是从同一个格子走,那么就没有问题。最后结果应该是max(dp[M−1][N][M][N−1],dp[M][N−1][M−1][N])max(dp[M-1][N][M][N-1], dp[M]原创 2018-01-15 15:55:30 · 302 阅读 · 0 评论 -
普及练习场 多维动态规划 最大正方形
题目链接题意理解这个题目我做过数据加强版本的,当时是用二分做的,不过好像TLE了。不过这次的数据量来看,是可以直接暴力求解的。当然考虑到这个题目放在了动态规划这个专题里面,那么递推方程还是不复杂的。dp[i][j]dp[i][j] 表示当前位置从左方、上方、左上方来看,选[i][j][i][j]这个点可以保证的正方形的最大边长。然后每个点往左边,左上方,上方拓展。代码i原创 2018-01-15 16:06:29 · 738 阅读 · 0 评论 -
普及练习场 更要技巧的动规与记忆化 乌龟棋
题目链接题意理解代码中dp[i][j][k][l]dp[i][j][k][l] 表示使用了i张1,j张2,k张3,l张4能走到的最大数。代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.String原创 2018-01-15 16:10:24 · 610 阅读 · 0 评论 -
普及练习场 更要技巧的动规与记忆化 统计单词个数
题目链接题意理解首先,用dp[i][j]dp[i][j]表示把第[0,i][0, i]个字母(从0开始计数)分成j部分,这其中最大的单词数,那么状态间的拓展关系应该是枚举每个小于i的值,并加上这其中的单词数。另外,求单词数也是可以用dp的。详细解释见代码。代码import java.io.BufferedReader;import java.io.IOExcept原创 2018-01-15 16:27:26 · 619 阅读 · 0 评论 -
普及练习场 高精度算法 A+B Problem(高精)高精度减法 A×B Problem
题目1:https://www.luogu.org/problemnew/show/P1601题目2:https://www.luogu.org/problemnew/show/P2142题目3:https://www.luogu.org/problemnew/show/P1303题意理解这对于Java选手来说简直就是随便写,当然对于python选手也是。代码i原创 2018-01-15 16:31:57 · 1484 阅读 · 0 评论 -
普及练习场 线性数据结构 约瑟夫问题
题目链接题意理解这道题目显然是一道非常经典的题目。。。所以随便怎么写吧。其实数据量这么小,可以直接暴力模拟整个过程,把所有的人给个布尔值,判断生死。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.uti原创 2018-01-11 19:16:35 · 300 阅读 · 0 评论 -
普及练习场 线性数据结构 最大子段和
题目链接题意理解首先考虑到,如果从一个最大的子段和如果是负数开始的,那么就可以去掉这个负数得到一个更大的子段和。于是就会想到,直接拿sum保存当前的位置的最大和。注意特判一下,如果是最后结果为0,那么表明前面全是负数/0,那么这时候再遍历一下。代码import java.io.BufferedReader;import java.io.InputStreamReade原创 2018-01-11 19:17:16 · 205 阅读 · 0 评论 -
普及练习场 线性数据结构 表达式括号匹配
题目链接题意理解这个显然使用栈这个数据结构啊代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Stack;import java.util.StringTokenizer;public class Main { public static原创 2018-01-11 19:17:41 · 294 阅读 · 0 评论 -
普及练习场 树形数据结构 FBI树
题目链接题意理解这条题目是这样的: 全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。如果一个节点的字符串满足这样的性质,那么它的值就是FBI中的一个。然后需要将这个节点的字符串对半分去构建子树。代码import java.io.BufferedReader;import java.io.InputStreamReader;i原创 2018-01-11 23:31:02 · 394 阅读 · 0 评论 -
普及练习场 树形数据结构 求先序排列
题目链接题意理解这是一道非常经典的题目。中序遍历的顺序是:左根右,后序遍历的顺序是左右根。由于我们构造节点的时候,一个是需要有这个节点的值,一个是需要左右子节点,那么就显然要借助后序遍历的根来赋值,并借助中序遍历的左和后序遍历的左来构建左子节点。同理,构建右子节点。代码import java.io.BufferedReader;import java.io.Input原创 2018-01-11 23:35:27 · 296 阅读 · 0 评论 -
普及练习场 树形数据结构 新二叉树
题目链接题意理解这题其实可以直接建树做,但是我偷懒了一下,直接在map里面存储了序号与树的对应关系。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import java.util.Stri原创 2018-01-11 23:40:19 · 222 阅读 · 0 评论 -
普及练习场 分治算法 幂次方
题目链接题意理解这题目就是要你分解一下,主要问题不是分解而是对于输出格式的整理。代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.StringToken原创 2018-01-09 19:39:12 · 468 阅读 · 0 评论 -
普及练习场 分治算法 逆序对
题目链接题意理解看到这个数据量,你就不应该想着去写个暴力。我原来已经写过一遍这个题目了,并且还记得是归并排序来做,但是有点记不得是怎么推导出思路的了,因此决定重新推导一遍。我找到了原来的PPT,并且加一点自己的理解吧。一开始的时候应该是1)+2),但是1)被分解成更小的1)和更小的2)。当只有两个数的时候,就只有2)没有1)了下面的是一开始自己的想法,但是有点乱原创 2018-01-09 21:03:37 · 416 阅读 · 0 评论 -
普及练习场 简单数学问题 火星人
题目链接题意理解这题不就是C++教你做人吗?代码#include #include #include using namespace std;int a[10010], n, m;int main(){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++){ scanf("%d",原创 2018-01-10 00:02:09 · 355 阅读 · 0 评论