
洛谷题解
cggwz
这个作者很懒,什么都没留下…
展开
-
集合位置(次短路模板题)
传送门这道题就是次短路的模板题,思路很简单,先求最短路,然后枚举最短路的每一条边,每次删去一条,然后再求最短路,对于这几次结果取最小值即可。本质的理论就是最短路和次短路(如果存在的话)是不可能重合的,也许长度相等。代码如下:#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<cmath>原创 2020-06-25 19:22:40 · 231 阅读 · 0 评论 -
邮递员送信(洛谷1629)
传送门第一反应是Floyd,但是看看数据规模,会tle那就考虑n次单源最短路,但是即使是SPFA,也会t那肯定就另有玄机。我们每次出去送货后都要直接返回邮局,所以我们需要的信息是,从邮局到每一点的最短距离,和每一点到邮局的最短距离。无论是Floyd还是n次单源最短路,都求了很多无用的信息,即不同目的地之间的最短路,那是我们不需要的。这就会浪费时间。所以我们应该怎么精确地求出自己所需要的信息呢?我们会发现无论是从邮局出去还是从外面回邮局,都有一个核心的汇聚点就是邮局,其实这就是两个单源最短路,一个是原创 2020-06-23 12:41:56 · 285 阅读 · 0 评论 -
MooFest G(USACO04OPEN)
传送门这题可以采用分治的方法,类似于归并排序的思路。其核心问题在于,我们怎么化简左右结合的步骤?如果我们只是单纯的分别计算左右两两的音量,那就是假的分治,实则是暴力算法,复杂度也是O(n2)的,那就没有任何意义了,而且会tle。那么我们怎么去处理呢?我们先回忆一下归并排序为什么会比更直接的排序更快,关键在于合并的步骤,归并排序在左右合并时,巧妙地利用了左右两边分别有序的条件,从而使得合并步骤在O(n)的复杂度内完成。所以我们也不妨对这个数据进行排序,那么我们应该按什么为标准进行排序呢?我们可以原创 2020-06-21 12:00:10 · 366 阅读 · 0 评论 -
Balanced Lineup G(USACO07JAN)
传送门本来是冲着倍增的标签来的,结果还是用线段树直接解决了。线段树就没什么好说的了,这个其实甚至不需要线段树,用ST表更好,因为这个根本不需要修改,没有修改操作。代码如下:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=50005;int n,Q;int h[maxn];int maxh[maxn*4],minh[maxn*4原创 2020-06-21 00:00:00 · 466 阅读 · 0 评论 -
洛谷题解——统计单词个数(NOIP)
传送门好久每写题了,接下来会多写些题的。这道题是典型的动态规划。大致上的思路是,先预处理出num[i][j]表示在区间[i,j]上有多少符合题意的单词。然后用f[l][part]表示把前l个字符分成part部分,最大的单词数是多少。然后我们就可以写出状态转移方程:f[l][part]=max{f[j][part-1]+num[j+1][l]}代码如下:#include<cstd...原创 2019-12-24 17:58:54 · 393 阅读 · 1 评论 -
Car的旅行路线(NOIP2001)
这里写链接内容这里写链接内容今天,是个重大一天,因为从今天起,为了大家有更好的体验,我将对我的题解进行全新改版!! (不满的lovechq:你不就还有5天就去备战高考了吗?现在改版有啥用? 来自cgg的答复:虽然,在过几天,我会和大家依依不舍地道别,因为我真的要去备战高考了,但是明年暑假我会强势回归的!请各位放心)知识点(cgg解释:这里是为了让大家看到此题涉及的知识点,可...原创 2018-08-21 22:30:24 · 576 阅读 · 0 评论 -
麦森数(NOIP2003普及)
传送门这里只做笔记,详细解答明年再补。数学推导:位数=log10(2)*p+1手写高精度快速幂代码如下:#include<cstdio>#include<cstring>#include<algorithm>#include<cmath> using namespace std;int p;int num[505];int r...原创 2018-10-18 19:52:57 · 1275 阅读 · 3 评论 -
细胞分裂(NOIP2009普及组)
传送门素数分解,简单数论但是要细心代码如下:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m1,m2;int ans,t,num;int maxu;int prime[30001];void div(){ memset(prim...原创 2018-10-18 21:15:19 · 995 阅读 · 0 评论 -
引水入城(NOIP2010提高组)
黑子传送服务首先bfs记录那些点可达,然后判断是否可以完全覆盖,如果不可以,统计一下没有覆盖的点的数量输出。如果可以,有两条性质,第一,每一个河边城市可以到达的干旱城市一定是连续的,第二,对于每一个河边城市能到达的干旱城市区间,他们的区间首段是有序的,即从左到右递增。所以我们在之前的bfs中要记录每个点可达的河边城市左右端点,然后用贪心进行区间覆盖问题即可。代码如下:#include&l...原创 2018-10-20 14:31:02 · 254 阅读 · 0 评论 -
仪仗队(SDOI2008)
异世界传送门看输入输出就很简单。事实上只要想通了,就没有什么问题几乎是纯数学分析我们考虑对称性,可以计算右下角的三角形的图形中的点数。再纵向观察,查找规律,就可看出对于第i列,可以看见的点有euler(i-1)所以累加就好了,然后乘2加一,就ok了怎么分析,明年再说。代码如下:#include<cstdio>#include<cstring>#incl...原创 2018-10-20 15:01:12 · 283 阅读 · 0 评论 -
小朋友的数字
小朋友的数字用动态规划用fcur[i]表示以坐标i为右端点的区间最大和f[i]表示前i个元素中的区间最大和,也就是特征值转移方程见代码然后求解过程也很简单但是注意,简单加减会导致爆longlong,所以,如果确定f[1]不是最大值,那么就在过程中,对求出的最大值进行取模,以防爆longlong。代码如下:#include<cstdio>#include<cstri...原创 2018-10-20 17:09:54 · 282 阅读 · 0 评论 -
过河(NOIP2005)
纱雾小屋妖精老师的水晶城堡你真信了? 算了吧!第一个是洛谷,第二个是vijos知识点离散化其实这个是很主要的,至于楼下的那一个……没有什么可看的。动态规划如楼上所言,这一题中的动态规划很水!基本思路对石头坐标排序 离散化并对石头对应位置打标记 动态规划详细解释对石头坐标排序题目没说读入时是有序的,所以我们要先排序,便于离...原创 2018-08-24 22:32:50 · 783 阅读 · 2 评论 -
飞扬的小鸟(NOIP2014)
御坂美琴超电磁炮洛谷传送服务白井黑子vijos传送服务不能让老婆累着了,所以把另一个交给黑子。 秀老婆!!秀老婆!!(第二个不是) 知识点动态规划动态规划、滚动数组基本思路用f[i%2][j]表示到达第i列高度为j的点最少需要跳几次 读入,记录柱子 以横坐标为枚举对象,开始递推 初始化下一列的数组(因为用的是滚动数组) 枚举当前列可达的点 ...原创 2018-08-24 21:43:00 · 510 阅读 · 0 评论 -
潜伏者(NOIP2009)
威廉同志的暴走 (就是我们敬爱的威廉·克梅修同志经常使用的暴走能力,虽然没有白井和女仆的快,将就一下吧!) 这除了是一道水题,就是一道水题。 直接模拟就好了。 不过注意,对于法则2,是密文和明文一一对应,不是单射或满射。 代码如下:#include<cstdio>#include<algorithm>#include<cstring>us...原创 2018-08-21 20:37:43 · 526 阅读 · 0 评论 -
神经网络(NOIP2003)
美琴大人超电磁炮传送(洛谷)美琴大人超电磁炮传送(vijos)(没错,就是炮姐的超电磁炮,是不是酸爽十足?) 秀老婆!知识点图论邻接矩阵、bfs乱搞基本思路邻接矩阵存图 bfs 输出详细解释邻接矩阵存图这是读入的时候干的,好像没什么要讲的。bfs这是比较关键的一步。 首先,我们扫描出输入点,并把他们扔进队列...原创 2018-08-22 21:53:32 · 523 阅读 · 0 评论 -
愤怒的小鸟(NOIP2016)
teleport 白井黑子空间移动专属传送服务! 好了我们来看今天的题。 我当年也参加了这场比赛,但是,当时的我是作为一个蒟蒻去参加的,所以这一题……连部分分都没做。 这道题其实难度适中。 看到这个猪的数量,也就知道要用状压了。 而且我们可以发现,当前状态可以由被打掉的猪的集合唯一确定。 因为我们已经打掉哪些猪,对我们未来再打猪是没有影响的。 有人可能会问:如果未来要打的猪有的...原创 2018-08-19 21:49:24 · 455 阅读 · 0 评论 -
蚯蚓(NOIP2016)
传送女仆 (???女仆专属服务) 这道题,写的难度并不大。 至于难不难想,呵呵,我已经忘了。 我们手写三个队列。 第一个用于存放没有切过的蚯蚓。 第二个用于存放被切过的较长的半个蚯蚓。 第三个用于存放被切过的较短的半个蚯蚓。 我们做的时候,先把第一个排一下序,然后就以时间为遍历对象。 然后每次取出一个最大的,然后切过后在放入第二个和第三个。 那么怎么取最大的? 取三个队列...原创 2018-08-18 21:57:26 · 516 阅读 · 0 评论 -
寻找道路(NOIP2014)
洛谷传送法阵 vijos传送药水 为什么要加一个vijos? 因为今晚洛谷太卡了,所以在vijos上提交了。 但是后来洛谷也评测结束了,所以我就两个都放了。 这道题,我提供一个非常丑的做法。 那就是bfs! 跑三遍bfs就行。 我们存图的时候,存反向边,这一点到后面就知道有什么用了。 我们来看看三遍bfs。 第一遍,从终点开始跑一遍裸的bfs,记录那些点得以访问。 第二遍,我...原创 2018-08-18 21:20:33 · 279 阅读 · 0 评论 -
选择客栈(NOIP2011)
NOIP2011提高组day2T2原创 2018-08-15 22:12:51 · 262 阅读 · 0 评论 -
平均数
传送门二分答案主要是判断函数我们用的是减去mid的前缀和成立条件是,存在form[i]<form[j]&&j-i>=m代码如下:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m;long long l,r...原创 2018-10-25 20:09:09 · 150 阅读 · 0 评论 -
又是毕业季2
传送门枚举答案,检查是当前数倍数的数的个数还有一条性质,那就是,随着人数的递增,所得答案递减。所以从上往下枚举答案即可。代码如下:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n;int vis[1000005];int ans[100...原创 2018-10-25 21:01:30 · 185 阅读 · 0 评论 -
【含二分精讲】通往奥格瑞玛的道路(二分+最短路)
英灵召唤我们先来看看二分答案有什么特征。首先,既然是二分答案,那么我们的答案通常是一个数值(也可能有其他情况吧,如果有,麻烦各位指出,当然我说的一个数值并不是题目要求的数值的数量,而是我们二分的目标),这样我们才可以称得上是二分答案。但是不是所有的这样的目标都可以进行二分。我们来看一下二分模板:while(l+1<r){ int mid=(l+r)/2; if(judge(...原创 2019-07-05 23:06:41 · 131 阅读 · 0 评论 -
树网的核(NOIP2007提高组)
传送门题意这道题的题意首先要读懂。简单说,题目是想要我们选取一个树核,使得树核外的其他点到树核的距离的最大值最小。准备我们存图采用邻接矩阵和链表兼用法,邻接矩阵用于跑Floyd,链表用于遍历与某个点直接相连的点。Floyd我们首先用floyd处理出各个点之间的距离,备用。找直径长度接下来我们先找出直径的长度,这个很好解决,直接枚举每两个点之间的距离,最大的一个就是。找出直径路径...原创 2019-07-10 16:34:49 · 356 阅读 · 0 评论 -
【换行符的问题】牛的旅行(洛谷1522)
传送门先读懂题意哈,题意就是,我们连接两个牧场得到一个新牧场,然后在所有新牧场中输出直径最小的牧场的直径。然后,看着n最大150,感觉就像枚举。然后我们按枚举算一下复杂度,应该是三次方,刚好。所以我们的思路是,用邻接链表存图。然后用Floyd处理出最短路。接下来我们需要处理出未连接时每个牧场的直径,以及每个牧场内每一个点到同一牧场其他点的距离中最大的距离。接下来只要枚举点对就行了。每...原创 2019-07-08 17:01:22 · 344 阅读 · 0 评论 -
砝码称重(洛谷1441)
回归第一题Saber传送这道题挺水的蛤?!枚举就好。知识点枚举基本思路用一个变量来记录哪些砝码被删去(数位),枚举就可以了!详细解释检查删去砝码数量对于生成的量,依次检验每个数位,看1的数量是否和m相等(1代表删去,0表示未删)得出答案设置一个函数dis[](下标为质量)用于保存哪些数可以取得,1表示可以,0表示不可以。然后枚举每一个未删去的砝码,在原有的dis为1的质...原创 2019-06-16 22:34:06 · 251 阅读 · 0 评论 -
NOIP2018提高组T1题解
题目大家可以在洛谷上看见,其实就是NOIP2013提高组的原题。代码都一样。主要的思想是差分数组。代码如下:#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int main(){ int n; scanf("%d",&n); int an...原创 2018-11-10 14:04:20 · 285 阅读 · 0 评论 -
同余方程(NOIP2012)
传送门裸的求逆元。代码如下:#include<cstdio>#include<algorithm>#include<cstring>using namespace std;long long a,b;//mod为素数时,n为mod-2;mod为合数时,n为phi(mod)-1,phi为欧拉函数 long long pow_mod(long lo...原创 2018-11-04 22:16:09 · 201 阅读 · 0 评论 -
有线电视网(信心题)
信心题没想到,在NOIP前一天还能找到信心。今天上午,本来有个班主任(生物老师)的生物小测,老师问我要不要去练会代码,我想了想,还是来了。于是40分钟,A了这道蓝题。其实就是dp,用f[u][k]表示节点u取k个用户时的最小花费(可能为负)转移方程也很好写,f[u][k]=min{f[u][k-i]+f[v][i]}(v为u的子节点,i为枚举的量)所以代码也就出来了:#include...原创 2018-11-09 19:59:06 · 207 阅读 · 0 评论 -
密码(zhx原创题)
题面有所改动。时限:1s 空间限制:256M【问题描述】在每个男生的心中都有一个女神,他们都渴望着和女神在一起的日子。lovechq也不例外。这天女神拿着一道题来问lovechq,题目是:有N个数组成的数列,现不给出这N个数,而给出N*(N-1)/2个数,他们是原数列N个数的两两之和,要求用给出的数求出原数列中的N个数。这下可把lovechq难倒了,于是他装模做样地对女神说题...原创 2018-11-01 21:20:23 · 540 阅读 · 0 评论 -
螺旋矩阵(NOIP2014)
螺旋矩阵大致思路:O(1),手动计算,数学题,分四个边算出公式,代值即可。代码如下:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,x,y;int main(){ scanf("%d%d%d",&n,&x,&y)...原创 2018-10-30 20:38:25 · 627 阅读 · 0 评论 -
倒水
传送门基本思想,就是二进制表示有两条基本性质:第一个性质,如果n个瓶子可以成功转化成k个,当且仅当n的二进制表示中有k个1第二个性质,我们如果在二进制的第i个位置加1,其代价高于在1到i-1每一位上都加1.第一条性质为我们提供了目标,第二条性质为我们提供了最佳方案。即从地位开始加,如果当前位是0,不操作,因为徒增瓶子,无效果如果是1,就加一个瓶子。开始统计1的个数,每次操作后把1的...原创 2018-10-24 21:41:43 · 148 阅读 · 0 评论 -
求和
1024节日快乐上面是题目链接今天是一个特殊的日子,很荣幸能在这一天用打代码来庆祝这一特殊的节日。坐标:老师办公室这道题很简单,快速幂就够。事实上,对于很大的a我们没必要去求因为:ab=(a%p)b (mod p)所以,对于很大的a,把1到10000的求一下即可。代码如下:#include<cstdio>#include<cstring>#inc...原创 2018-10-24 20:44:19 · 151 阅读 · 0 评论 -
小凯的数字
这是一道水题首先一个数学常识:一个数各个数位上的数字之和对9取模的结果即为该数字对9取模的结果。所以引申一下就是:将当前数字任意切分,求和得到的数,对于9取模的结果,即为当前数字对9取模的结果。这个结果,应当很好证明,我就不证明了。所以,有了这个结论,我们就可以秒解这道题。用一个等差数列求和公式,如果怕乘法爆longlong,可以边乘边取模,然后手动求一下2在模9下的逆元,很好想,5就够...原创 2018-10-31 20:27:02 · 467 阅读 · 1 评论 -
余数求和(CQOI2007)
余数求和这是一道老题,但是作为一道省选题,它的代码却短小精悍,可以观赏。我们只需要进行数学推导即可解决。(60分暴力分应该是可以秒拿的)由题意得:ans=∑i=1nk%ians=\sum\limits_{i=1}^{n}k\%ians=i=1∑nk%i首先我们需要知道 a%ba\%ba%b 可以表示为 a−b∗⌊ab⌋a-b*\lfloor\frac{a}{b}\rfloora−b∗⌊...原创 2018-10-31 19:14:28 · 231 阅读 · 0 评论 -
中国象棋(AHOI2009)
传送门简单思路:dp用f[i][j][k]表示前i行有j列放了一个子,有k列放了两个子转移,只要枚举每一行的放置情况即可,有:不放、在空列放一个,在有一个子的列放一个,在两个空列各放一个,在两个一子列各放一个,在空列和一子列各放一个。枚举ijk即可,最后求和注意:逆元只有在进行除法前需要取模时才需要,否则不需要。代码如下:#include<cstdio>#include...原创 2018-10-23 20:08:25 · 157 阅读 · 0 评论 -
火车运输(NOIP2013)
传送药水 (喝了这一壶传送药水,保你看了什么题都觉得神清气爽) 这题不算水。 首先想到,肯定需要跑一遍最大生成树,因为我们需要尽可能大的限制。 那么,接下来就是求两点之间最小限制。 那么就是我们就可以用求LCA(最近公共祖先)来解决这个问题。 所以就倍增好了。 我们这里倍增的有两个数组,一个是祖先,另一个是当前点到祖先的路上的最小限制。 最后理一遍思路: 先kruskal建立一个...原创 2018-08-17 22:17:59 · 356 阅读 · 0 评论 -
火柴排队(NOIP2913)
传送法阵 (老是放传送门,都用腻了,换一个) 这道题,想通了就不难。 其实主要就是数学分析。 我们来对目标式进行化简: ∑(a-b)²=∑(a²-2ab+b²)这里用了完全平方公式(应该是这个吧!) 那么我们知道对a/b的平方求和是一个定值。 所以我们要关注的就是∑(-2ab),我们要求它的最小值,也就是求∑(ab)的最大值(前面有个负号)。 那么什么时候最大呢? 我...原创 2018-08-17 22:02:24 · 286 阅读 · 0 评论 -
TJOI2010中位数
中位数 上面是题目链接。 这一题比较水。 思路非常显然。 用mid查询时,只要返回中间值就行了。 主要就是add操作。 我们肯定不能插在末尾,然后用系统快排,这样只有30分。 那么正确的操作应该是二分。 也是基本的二分,只是在插入上有所独特的处理。 最后在找到位置后,只要将右边的数往右挪一个位置即可。 下面是代码:#include&lt;cstdio&gt;#incl...原创 2018-06-01 21:06:05 · 189 阅读 · 0 评论 -
练习一:数字三角形
经典题目:数字三角形解题思路详解滚动数组福利!原创 2017-12-16 23:29:17 · 948 阅读 · 0 评论 -
NOIP2017提高组day2T1题解(奶酪)
NOIP2017提高组day2T1,奶酪,一道有趣的题原创 2017-12-08 21:41:06 · 1281 阅读 · 0 评论