洛谷题解
文章平均质量分 73
洛谷题解
君义_noip
五道口职业技术学院毕业
信息学奥赛教练
小说作者
展开
-
洛谷 P1379 八数码难题
则每个布局共有9个位置:(1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)。再次移动后,又可以达到几种布局,所有的布局(状态)构成一个解空间树。在广搜过程中,需要判断当前布局是否是先前已经出现过的布局,如果先前已经出现过,则不需要将该状态入队。设set或unordered_set类型的vis,如果某布局已经出现,则将该布局转为整数加入vis。9个数字构成的3乘3布局作为一个状态,每次移动数字后,布局发生改变。原创 2024-09-04 12:00:08 · 388 阅读 · 0 评论 -
洛谷 P1181 数列分段 Section I
每次从第1个未被选择的数字开始,选择尽量长的满足加和小于等于m的子段。表示数字序列的第i个数字。顺序遍历数组,对于每个元素。记整个数字序列为数组a,原创 2023-11-17 17:18:13 · 565 阅读 · 0 评论 -
信息学奥赛一本通 1435:【例题3】曲线 | 洛谷 洛谷 P1883 函数
已知f(x),g(x)两个函数的较大值h(x)=max(f(x),g(x))是下凸函数,那么多个函数的最大值。【注】:r与l差值很小时结束循环,对于一般的结果保留几位小数的问题(比如保留5位,8位等),将差值取为。已知f(x),g(x)为下凸函数,证明h(x)=max(f(x),g(x))是一个下凸函数。在定义域[0,1000]中是下凸函数(单谷函数),因此可以使用三分求单谷函数的极小值点。,即为所有二次函数当自变量为x时的所有函数值的最大值。,所以所有的二次函数都是开口向上的,为下凸函数。原创 2023-11-17 14:39:43 · 678 阅读 · 0 评论 -
信息学奥赛一本通 2077:【21CSPJ普及组】小熊的果篮(fruit) | 洛谷 P7912 [CSP-J 2021] 小熊的果篮
交替在st0与st1中选择数字,下一次在另一个集合中选择出的数字要比上一次选择出的数字更大,并删除数字。如果当前fruit链表在删除数字后,成为空链表,那么需要在block链表中删除该空链表,并判断前一个链表和后一个链表的水果种类是否相同,如果相同,则合并两个单链表(即把后一个链表接到前一个链表的后面)。每次遍历block链表,在block链表中的每个“块”中(fruit链表)取第一个数字输出,并删除fruit链表中的第一个数字。创建一个block双向链表,block链表中的每个元素都是一个“块”。原创 2023-10-09 20:08:48 · 1162 阅读 · 0 评论 -
洛谷 P1148 拱猪计分
设布尔数组h,用来记录是否有牌Hi。设布尔变量s12, d10, c10,表示是否存在S、D和C牌。D10与D11都可能出现,D10作用与D11相同。如果D10与D11同时出现,只算有1张D牌。当H1~H13都有,但D或S只有1个时:D牌作用:-100分,S牌作用:+100分。按照题目描述,根据该玩家手中存在的牌的种类,计算分数。原创 2023-10-04 14:33:30 · 690 阅读 · 0 评论 -
洛谷 P1151 子数整数
枚举10000~30000的每一个数字,通过计算得到该五位数字分解出的。,是x的中间3位,要取到中间3位的方法是:x/10%1000。,是x的中间3位,要取到最后3位的方法是:x%1000。枚举10000~30000的每一个数字,对于一个五位数字。,判断这三个数字是否都是k的倍数(除以k的余数为0),是x的前3位,要取到前3位的方法是:x/100。判断是否有输出,如果没有输出,则输出No。判断这三个数字是否都是k的倍数,是则输出。这三个数字都是k的倍数,则输出该数字,将。最后如果没有输出数字则输出No。原创 2023-10-04 09:38:06 · 604 阅读 · 0 评论 -
OpenJudge NOI 2.1 8755:砝码称重 | 洛谷 P2347 [NOIP1996 提高组] 砝码称重
OpenJudge NOI 2.1 8755:砝码称重设重量为1g、2g、3g、5g、10g、20g的砝码的总数量分别为:a1,a2,a3,a5,a10,a20a_1, a_2, a_3, a_5, a_{10}, a_{20}a1,a2,a3,a5,a10,a20,选择使用的砝码数量分别为:i1,i2,i3,i5,i10,i20i_1, i_2, i_3, i_5, i_{10}, i_{20}i1,i2,i3,i5,i10,i20,设bool类型的vis数组,为真表示可以称出重原创 2023-01-10 16:48:36 · 1162 阅读 · 0 评论 -
信息学奥赛一本通 1329:【例8.2】细胞 | 洛谷 P1451 求细胞数量
【题目链接】ybt 1329:【例8.2】细胞【题目考点】1. 搜索 连通块问题【解题思路】设数组vis,vis[i][j]表示(i,j)位置已经访问过。遍历地图中的每个位置,尝试从每个位置开始进行搜索。如果该位置不是0且没有访问过,那么访问该位置,并尝试从其上下左右四个位置开始搜索。在看一个新的位置时,如果该位置在地图内,没有访问过且不是0,那么继续从该位置开始进行搜索。在遍历网格的过程中,一次成功开始的搜索可以确定一个连通块,统计连通块的个数,即为结果。搜索方法可以采用深搜或广搜。原创 2022-05-06 23:10:53 · 2130 阅读 · 1 评论 -
信息学奥赛一本通 1310:【例2.2】车厢重组 | 洛谷 P1116 车厢重组
【题目链接】ybt 1310:【例2.2】车厢重组【题目考点】1. 冒泡排序【君义精讲】排序算法【解题思路】该题实际求的是:统计冒泡排序中数据交换的次数【题解代码】解法1:冒泡排序 下标从1开始#include<bits/stdc++.h>using namespace std;int main(){ int n, a[10005], ct = 0;//ct:数据交换的次数 cin >> n; for(int i = 1; i <= n; ++i原创 2022-03-23 00:52:48 · 3030 阅读 · 2 评论 -
信息学奥赛一本通 2075:【21CSPJ普及组】插入排序(sort) | 洛谷 P7910 [CSP-J 2021] 插入排序
对于相同的数值,在原数组中下标更大的元素应该排在后面。对于相同的数值,在原数组中下标更小的元素应该排在前面。先根据题意,使用索引数组完成插入排序,注意交换元素时需要使用我们定义的。sa与as保存的就是原数组a与目标数组s之间的两个方向的映射关系。主函数中,首先输入a数组,初始状态下s数组与a数组相同,满足。假想存在排序后的目标数组s,设数组sa为索引数组,表示。开始,不断变大,向后遍历s数组,直到j为n-1。开始,不断变小,向前遍历s数组,直到j为2。在排序后的s数组中的下标,也就是。原创 2023-09-26 17:12:55 · 1072 阅读 · 1 评论 -
信息学奥赛一本通 2074:【21CSPJ普及组】分糖果(candy) | 洛谷 P7909 [CSP-J 2021] 分糖果
根据上述规律,x从l变化到r的过程中,x%n的值是逐渐增大的,当x为r时,x%n的值最大,为。这似乎是在做取模运算。,那么从l到r范围内一定存在一个数字x%n为n-1,一定存在一个数字x%n为0。其中,x%n的值每“段”从0变到n-1,都满足x/n的值是不变的。下图横轴为x,纵轴为x%n,L,R为满足该描述的一种可能的情况。下图横轴为x,纵轴为x%n,L,R为满足该描述的一种可能的情况。可以看到,x%n的值始终是从0变到n-1,再从0变到n-1。,x/n的值始终是m,而x%n的值从0变化到n-1。原创 2023-09-25 20:56:10 · 829 阅读 · 2 评论 -
信息学奥赛一本通 2086:【22CSPJ普及组】乘方(pow) | 洛谷 P8813 [CSP-J 2022] 乘方
设r为累乘乘积,初值为1。如果在循环求幂的过程中,若发现r大于。,可以使用long long类型保存该值。因此当a=1时,应该直接输出1。,则直接输出-1,而后结束程序。的数字相乘,结果不会超过。原创 2023-09-25 19:56:32 · 608 阅读 · 0 评论 -
信息学奥赛一本通 1984:【19CSPJ普及组】纪念品 | 洛谷 P5662 [CSP-J2019] 纪念品
结合购买纪念品的背景,每件商品可以购买无限件,因此在第i天买入商品,到第i+1天卖出所有商品,想要赚到最多的钱币,该问题实际是一个完全背包问题。到第二天,又可以卖出商品换钱了,因此只需要考虑商品在当天及第二天的差价,差价越高,今天买该商品,到第二天升值越多。由于小伟每天都可以买卖物品无限次,我们可以假想每天开始时,他把所有的商品都卖出,看用手中的钱该买哪些商品。原创 2023-08-19 12:17:50 · 955 阅读 · 0 评论 -
信息学奥赛一本通 ybt 1975:【16NOIP普及组】海港 | 洛谷 P2058 [NOIP2016 普及组] 海港
每条船为一个元素,包含属性vector类型的nation,保存所有人的国籍,以及time表示时间。设结构体Peo表示一个人,每个人包含属性:时间time、国籍nation。,这样可以节省空间。如果设为数组,则会内存超限。,可以把每个人作为一个元素保存在队列中。每次有船到岸,就输出一下国籍总数。每次有船到岸,就输出一下国籍总数。由于人数总和(即k的加和)最大为。注意:nation必须设为。表示第i国籍的人数。原创 2023-08-19 11:36:11 · 802 阅读 · 0 评论 -
洛谷 P1141 01迷宫
尝试从每个顶点出发进行搜索(可以使用深搜获广搜),搜索一个格子周围的满足:在地图内,未访问过,与当前格子的数值不同的格子。一趟搜索标记的格子属于一个连通块(无向图连通分量)。每个格子是一个元素,每个连通块(连通分量)是一个集合。使用并查集合并相邻的数值不同的格子,同时统计每个格子中元素数量。如果网格有n列,则从1开始的坐标(x, y)可转为(x-1)*n+y。在询问某位置时,输出该位置所属的连通块的格子数量。查询某格子时,输出该格子所在集合的元素数量。统计每个连通块中格子数量。原创 2023-05-02 11:49:54 · 805 阅读 · 0 评论 -
洛谷 P7771 【模板】欧拉路径
如果该图出度比入度大1的顶点数与入度比出度大1的顶点数都为1,那么该图是半欧拉图。为了输出字典序最小的序列,将保存邻接点的每个vector排序。从起点出发,调用Hierholzer算法,输出欧拉路径。输入边的同时,统计顶点的入度和出度。如果该图入度都等于出度,是欧拉图。判断有向图有欧拉路径的条件。,只能使用邻接表存图。原创 2023-04-15 00:03:18 · 1722 阅读 · 0 评论 -
洛谷 P1341 无序字母对
给定n个不同的字母对,也就是n个不同的边(没有重边),要得到一个有n+1个字母的字符串,每个字母对都出现。相邻两个字母是一个字母对,n+1个字母的字符串中可以出现n个字母对,也就是说给定的n个字母对都要出现。每个字母是一个顶点,每个字母对是一条边。“无序即字母对中的两个字母可以位置颠倒”,意味着这样的边连接的两个字母没有先后顺序,是无向边,形成的图是无向图。该字符串相当于图中的一条路径,字符串中相邻的字母构成的字母对是一条边。该问题抽象为:每个字母是一个顶点,每个字母对是一条边,求该无向图中的欧拉路径。原创 2023-04-14 17:34:05 · 1235 阅读 · 0 评论 -
信息学奥赛一本通 1385:团伙(group) | 洛谷 P1892 [BOI2003]团伙
也就是说一个人的所有敌人都互为朋友,同属于一个集合。,集合的数量就是fa数组中根结点的个数。每个人是一个元素,一个团伙是一个集合。并查集中每个集合的根结点满足。因此,设数组enemy,表示i的某一个敌人。最后输出集合的数量。原创 2023-04-14 15:30:29 · 1873 阅读 · 0 评论 -
信息学奥赛一本通 1523:嗅探器 | 洛谷 P5058 [ZJOI2004]嗅探器
首先不能考虑根结点是割点的情况,根结点st是蓝军信息中心,红军的嗅探器只能放在中间服务器上,不能放在信息中心。因此,如果可以在u处放嗅探器,信息中心ed必然应该在DFS生成树中的以割点u为根结点的子树中。假设合理的可以作为嗅探器的割点为u,删掉u后,st与ed必然存在于两个不同的连通分量。思考从顶点st(一个蓝军信息中心)出发,进行深搜,得到DFS生成树,树根是st。从顶点S出发,调用tarjan算法,求出图中的割点,判断该割点是否可以放嗅探器。求所有满足条件的可以放嗅探器的顶点的最小值,即为结果。原创 2023-04-07 21:19:17 · 967 阅读 · 0 评论 -
洛谷 P5657 [CSP-S2019] 格雷码
当n为1时,只有1位格雷码。k为0时,第0号格雷码为"0"。k为1时,第1号格雷码为1。推导对于正向、逆向都从0开始数的长为n的序列,逆向第i个数字是正向第几个数字。如将k转为二进制数后共有m位,从低位到高位的编号为0, 1, …号二进制串,在前面再加上前缀1,即为n位格雷码的第k号二进制串。k1的第i位就是k的第i+1位。要查询的是n位格雷码的第k号二进制串,先比较k与。第3位为1,第2位为1,第1位为0,第0位为1。例:k为13,二进制编码为:1101,:求n位格雷码中的第k号二进制串。原创 2023-04-06 16:55:56 · 1698 阅读 · 0 评论 -
信息学奥赛一本通 1375:骑马修栅栏(fence) | 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences
从起始顶点出发,进行深搜,使用Hierholzer算法求欧拉路径。为了满足条件,必须按顶点编号从小到大访问一个顶点的所有邻接点。只需要在实现Hierholzer算法时,包括选择起始顶点或某顶点的邻接点时,尽量选择编号较小的顶点来访问即可。“两顶点间可能有多个栅栏”意味着可能有重边,但Hierholzer算法可以处理有重边或自环的图。“输出500进制表示法中最小的一个”,即为输出字典序最小的欧拉路径顶点序列。在输入边时,统计顶点编号的最大值,作为总顶点数量。该图是无向图,顶点就是图中的顶点,栅栏是边。原创 2023-04-01 00:29:50 · 2430 阅读 · 0 评论 -
信息学奥赛一本通 1388:家谱(gen) | 洛谷 P2814 家谱
每输入一个名字,都先检查一下name2Num中是否有以该名字为键的键值对(即该名字是否出现过),如果之前没出现过,则为该名字分配一个新的编号。而后该名字对应的编号为。每个人都是用一个整数来表示的,那么就可以用树的双勤表示法(也就是并查集中的fa数组)来表示所有人之间的关系。模仿并查集中的查询操作,写出find函数,求x的祖先。保存的键值对为(名字,编号)。保存的键值对为(编号,名字),可以将编号转为名字。设置将名字与整数互相转换的映射。表示名字为x的人的父亲的名字。为编号为x的人的父亲的编号。原创 2023-03-24 17:09:14 · 977 阅读 · 0 评论 -
洛谷 P1536 村村通
这是个无向图,每个城镇是一个顶点,每条道路是一条边。“任何两个城镇间都可以实现交通”,即为任意两顶点间有路径。每个连通分量是一个集合,遍历所有的边,让每条边连接的两个顶点所在的集合合并。最后集合的数量即为连通分量的数量。尝试从每个顶点出发进行搜索,可以进行深搜或广搜,标记访问过的顶点。成功开始搜索的次数即为连通分量的个数。当前该图未必是连通图,问想让该图变为连通图最少还需要添加多少条边。显然,需要添加边的条数为该图中连通分量的数量减1。求一个图的连通分量数量,有两种方法。原创 2023-03-23 15:46:56 · 443 阅读 · 0 评论 -
洛谷 P3916 图的遍历
建立原图的反图,编号从大到小遍历各个顶点,在反图上从该顶点出发进行深搜,看从该顶点出发可以到达哪些顶点。如果在原图中,顶点v能够到达的编号最大的顶点是u,那么在反图中,顶点u到顶点v一定有路径。原创 2023-03-23 15:12:25 · 660 阅读 · 0 评论 -
洛谷 P1113 杂务
即便没有这个条件,我们也可以先做拓扑排序,得到的序列一定满足序列中第i项工作的准备工作都在第1至第i-1项工作中。建图时,改为建反图,即如果杂务A是杂务B的准备工作,那么让B到A有一条有向边。首先对该问题进行抽象,每项杂务是一个顶点,如果杂务A是杂务B的准备工作,那么A到B有一条有向边。求所有u的准备工作的结束时间的最大值,即为u的开始时刻,再加上完成u的时间。每确定一项杂务u的完成时刻,就更新该顶点u的邻接点v的完成时刻。对于入度为0的顶点i,该杂务的完成时刻就是完成该杂务的时长。原创 2023-03-22 19:27:31 · 603 阅读 · 0 评论 -
信息学奥赛一本通 1383:刻录光盘(cdrom) | 洛谷 P2835 刻录光盘
资料分发的过程类似于深搜,如果一个顶点出发进行深搜,那么该顶点所在强连通分量中的顶点都会被访问到。即如果一个人收到资料,那么该人对应的顶点所在强连通分量中的所有顶点所表示的人都会收到资料。两种算法都是先求强连通分量,而后求每个强连通分量的入度,统计入度为0的强连通分量的数量即为需要分发的光盘数量。设并查集,每个集合表示图中的一棵子树,该子树有唯一的入度为0的根结点。将该图缩点,每个顶点代表一个强连通分量,求出每个强连通分量的入度。因此发放光盘的数量,就是将该图缩点后,入度为0的强连通分量的数量。原创 2023-03-15 01:28:48 · 1941 阅读 · 4 评论 -
洛谷 P1825 [USACO11OPEN]Corn Maze S
从起点出发进行广搜,把位置及到该位置的步数打包成一个结点,队列中保存这样的结点。每出队一个结点,访问该结点位置上下左右的四个位置,该位置必须同时满足条件:在地图内、未访问过、不是墙。如果满足条件,则访问该位置,到该位置的步数加1,把该位置和步数打包成结点入队。在广搜时,如果从当前位置出发走一步到达的位置是传送门,则正常进行,将该位置标记为已访问,打包该位置和步数成一个结点,结点入队。当出队的位置是传送门时,让牛从当前所在传送门的位置传送到另一个门的位置,从这里开始继续走。,表示一个传送门的位置。原创 2023-03-03 11:40:46 · 647 阅读 · 3 评论 -
洛谷 P5318 【深基18.例3】查找文献
目前小K已经打开了编号为1的一篇文章”,意为只从1号顶点出发开始进行搜索。要做的是从1号顶点一趟搜索,并不需要把给出的所有文章都遍历到。首先将题目描述抽象为拓扑图,这是一个有向图,每篇文章是顶点,边表示文章x有参考文献y。如果使用邻接矩阵,声明变量的数量会达到。中保存的u的邻接点必须是从小到大排列的。实现方法有以下几种,复杂度都是。因此本题只能使用邻接表求解。,是不可接受的(最大可以到。如果使用邻接表保存,那么。邻接矩阵的空间复杂度是。,邻接表的空间复杂度是。,该题中顶点数V达到。原创 2023-02-24 23:38:37 · 1218 阅读 · 0 评论 -
信息学奥赛一本通 1379:热浪(heatwv) | 洛谷 P1339 [USACO09OCT]Heat Wave G
城镇为顶点,道路为边,道路的通过费用为边的权值。道路是双向的,所以是无向图。该问题求从起始城镇到终点城镇的最小费用,实际就是求从起始顶点到终点顶点的最短路径的权值。该题中城镇数(顶点数)最大为2500,可以使用Dijkstra算法,Dijkstra算法堆优化,及SPFA算法。原创 2023-02-07 23:36:57 · 1191 阅读 · 0 评论 -
洛谷 P1551 亲戚
并查集中,每个集合由一个树来表示,树的根结点代表一个集合。find函数可以返回一个结点所在集合的根结点。每组互相是亲戚的人构成一个集合,如果两人是亲戚,那么调用merge函数让两人所在的集合合并,。对于多组询问,判断两人是否在一个集合中,即为判断两人所在集合的根结点是否相同。原创 2023-02-05 22:21:56 · 387 阅读 · 0 评论 -
信息学奥赛一本通 1377:最优乘车(travel) | 洛谷 P5767 [NOI1997] 最优乘车
该问题中的“最短路径”指的是有向无权图中的最短路径,即两点之间路径上边的条数。以巴士站为顶点,如果两顶点之间有边,说明两巴士站之间有直达的巴士线路。对于无权图,可以将该图每条边的权值都视为1,而后就可以使用Floyd,Dijkstra,SPFA等方法求解。【注意】由于每行末尾可能是"\r\n",因此在输入第一行m与n后,需要去掉本行的换行符时,不能只写一句。),因为当结尾是"\r\n"时,只会读入"\r",还留下了"\n"。注意:每行末尾的换行符可能是"\r\n"或"\n"。原创 2023-02-01 19:45:12 · 2455 阅读 · 0 评论 -
信息学奥赛一本通 1327:【例7.6】黑白棋子的移动 | 洛谷 P1259 黑白棋子的移动
【题目链接】ybt 1327:【例7.6】黑白棋子的移动【题目释义】开始时,末尾有两个空位可以使用。棋子移动后,会在原位置留有空位,相隔空位的两个棋子不算相邻。每次必须移动相邻棋子,可以是同色的也可以是不同色的,只能将这两个棋子移动到空位。移动棋子必须跳过一些棋子,不可以平移。【题目考点】1. 递归【解题思路】首先要知道,当n=4时,左侧4个白棋,右侧4个黑棋,此时有固定的最少的移动方法,5步后可以完成移动。如果n>4,左侧n个白棋,右侧n个黑棋,那么每次将中间的白黑原创 2022-04-25 20:37:36 · 3512 阅读 · 0 评论 -
信息学奥赛一本通 1415:【17NOIP普及组】图书管理员 | 洛谷 P3955 [NOIP2017 普及组] 图书管理员
可以先对book数组进行升序排序,而后对于每个读者,在book数组中二分查找满足图书编码末len位与读者需求码code相同的第一个图书编码。这就要求图书编码关于末len位有序(如果末len位相同,那么图书编码小的排在前)。可以先对book数组进行升序排序,而后对于每个读者,在book数组中顺序查找满足图书编码末len位与读者需求码code相同的第一个图书编码,该编码就是满足条件的图书编码中的最小值。对于每个读者,需求码长度为len,需求码为code,图书编码存入book数组。题目要求图书编码不超过。原创 2023-01-20 17:58:02 · 2162 阅读 · 0 评论 -
洛谷 P3613 【深基15.例2】寄包柜
如果我们可以为每个可能的寄包格子设一个int类型的变量来保存该格子中的物品,这就是可行的。我们可以为每个寄包柜设一个map对象,map中的键为格子编号,值为物品。如果每个格子都用一个int类型的变量表示,那么需要声明。个int类型的变量。内存限制128M,最多保存。这里需要用到表示映射的STL map。个int类型的变量,一定会内存超限。表示第i个寄包柜第j个格子中的物品。由于超市中的寄包格子总数不会超过。个寄包柜,每个寄包柜最多有。原创 2023-01-11 22:46:56 · 1442 阅读 · 2 评论 -
信息学奥赛一本通 1916:【01NOIP普及组】求先序排列 | 洛谷 P1030 [NOIP2001 普及组] 求先序排列
已知中序、后序遍历序列,构建二叉树,而后对该二叉树做先序遍历,得到先序遍历序列。思路与写法1相同,不同点在于如果使用string类,需要使用string类对象的。成员函数来取子串,我们需要分别计算出左右子树中序(后序)遍历序列子串的长度。设全局的字符数组:s_m表示中序遍历字符串,s_p表示后序遍历字符串。为后序遍历序列构建二叉树,返回二叉树根结点的地址。原创 2023-01-03 18:51:23 · 981 阅读 · 0 评论 -
洛谷 P4913 【深基16.例3】二叉树深度
搜索时,带一个参数表示当前的层数,每搜索深入一层,该层数加1。如果该结点是叶子结点,那么更新最大层次数(也可以搜索到任意结点时都一次更新),最后输出最大层次数。原创 2023-01-03 17:41:44 · 734 阅读 · 0 评论 -
信息学奥赛一本通 1370:最小函数值 | 洛谷 P2085 最小函数值
我们可以先把所有函数x=1时的值加入到一个集合中,取出其中的最小值,然后让生成该值函数的自变量加1,把求出函数值放到这个集合中。循环m次,每次循环取堆顶,获得各Func类对象中的最小函数值,输出该值。而后删除堆顶,让该Func类对象离开堆,接着让该对象的x加1,再把这个新的对象插入堆。设堆pq,堆中保存的是Func类对象,堆中的优先级定义为:Func类对象的函数值越小,优先级越高。因此,可知二次函数的二次项系数a,一次项系数b,常数项c都是正整数。对于该函数来说,x=1时函数值最小,x=2时函数值第二小。原创 2022-12-20 23:44:34 · 1174 阅读 · 0 评论 -
信息学奥赛一本通 1369:合并果子(fruit) | 1836:【04NOIP提高组】合并果子 | 洛谷 P1090 [NOIP2004 提高组] 合并果子
复杂度内取到所有果堆中数量最小的一堆,也就是取当前多个数字中的最小值,需要用到堆(heap)这一数据结构,C++ STL中提供了以堆为原理的优先队列(priority_queue),可以使用该容器求数字中的最小值。将优先队列设为小顶堆,将n个数字加入到优先队列之中,每次出队两个数字,出队的两个数字就是最小的两个数字,将这两个数字加和,即为合并两堆果子。如果a, b两堆合为一堆,则可以画一个根结点g表示a,b合并后的果堆,这个结点的左孩子是a,右孩子是b。下图中,冒号后面的数字表示果子数量。原创 2022-12-12 03:12:44 · 2400 阅读 · 0 评论 -
洛谷 P1449 后缀表达式
long long变为int,即为本题的题解代码。本题与上题基本相同。因此把上题题解代码中的。原创 2022-11-09 18:47:37 · 676 阅读 · 0 评论 -
信息学奥赛一本通 2082:【21NOIP提高组】报数 | 洛谷 P7960 [NOIP2021] 报数
类比判断多次询问的数字是不是质数的问题,可以通过筛法求质数表,而后询问的方法来减少复杂度。简单说成:判断某数字的因数中是否包含7。否则,要输出x的下一个因数包含7的数字。表示数字i的下一个因数不包含7的数字。次的询问,如果预先确定了每个可能的数字的的因数中是否包含7,那么每次询问的复杂度为。根据新的规则,任何一个十进制中某一位含有7的数字的倍数都不能报出来。是一个因数不包含7的数字,它的下一个因数不包含7的数字是。在生成该数组后,x的下一个因数不包含7的数字就是。对于输入的x,如果x的因数包含7,即。原创 2022-11-04 17:06:55 · 1093 阅读 · 0 评论