自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Acwing-97-约数之和

假设现在有两个自然数 A 和 B,S 是 AB 的所有约数之和。输出一个整数,代表 S mod 9901 的值。在一行中输入用空格隔开的两个整数 A 和 B。请你求出 S mod 9901 的值是多少。: A 和 B 不会同时为 0。

2023-01-25 23:08:42 309

原创 Acwing-4656-技能升级

这里的n即表示第i个技能大于mid的情况下(第m次技能升级前升级的可以升级的技能)最多能够升级多少次,然后把n个技能都运算一遍加起来得到res,返回是否res >= x,即得到在当前二分的第m大的要加点值得情况下,满足在第m次升级技能前,是否已经升级了m次以上,如果是,说明二分的这个第m大的值小了,需要转移到大区间继续二分查找。最终返回的就是要求的最大加点之和。按常规思路来想,我们首先肯定是升级当前可以增加技能点数最多的那一个技能,如第一次加点,一定是对所有技能从大到小排序后,第一个技能就是最大的。

2023-01-18 15:30:00 121

原创 Acwing-4655-重新排序

给定一个数组 A 和一些查询 Li,Ri,求数组中第 Li 至第 Ri 个元素之和。小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可以增加多少?输入格式输入第一行包含一个整数 n。第二行包含 n 个整数 A1,A2,···,An,相邻两个整数之间用一个空格分隔。第三行包含一个整数 m 表示查询的数目。接下来 m 行,每行包含两个整数Li、Ri,相邻两个整数之间用一个空格分隔。输出格式。

2023-01-08 21:54:48 114

原创 acwing - 第K短路

我们可以用a*算法,先求出理想中每个点到终点的最短距离(估计函数),然后通过这个他与实际距离之和为基准进行每一步搜索,因为将这一基准放到优先队列中每次出队取到的都是最优的走法,这样就省去了所有的冗余搜索分支,每次只走最理想的道路,直到第k次到达终点时输出我们实际走的距离就是要求的第k短路。注意点:题目表明每条最短路中至少要包含一条边,所以我们需要考虑到当起点终点重合是,他们是没有边的,当k=0时则会直接输出0,而不含边的那条长度为0的路径是不能算进去的,所以我们要提前k+1。每条最短路中至少要包含一条边。

2023-01-02 18:38:29 86

原创 洛谷-P1462-通往奥格瑞玛的道路

右边界我们可以开int的最大值,大概是10^9就好,但是本题实际需要开到long的最大值,因为要想通过100%的数据,fi范围最大是10^9,如果按最大来看,走所有的点10^4个点,所需钱财是10^9 * 10^4 = 10^13,但是不一定每个点只走一次,所以会比10^13还多,这个数据已经在long的范围内了,所以最好要开Long.MAX_VALUE。表示城市ai​ 和城市bi​ 之间有一条公路,如果从城市 ai​ 到城市 bi​,或者从城市 bi​ 到城市 ai​,会损失ci​ 的血量。

2022-12-31 17:46:39 326

原创 洛谷-P2678-跳石头

其次是让我们求最短跳跃距离的最大值,其中的最短跳跃距离从题中我们可以得知其最小值和最大值是多少,最小值便是1,最大是L(总共就两块石头,一步跳过去,距离就是L),这又找到了二分的边界,很显然就可以用二分找了;但是此题需要注意一个易错点,就是check函数中遍历数组时,我们要走到最后一个石头(终点)才算停止,这个终点不一定是题中最后一个给的那块石头,因为最后给出的这个石头离起点的距离很可能不是L,就说明它不是终点,这时候我们就需要遍历多一个数才算走完check函数。对于 50% 的数据,0≤M≤N≤100。

2022-12-30 21:18:09 154

原创 洛谷-P2024-食物链

我们可以采用种类并查集,开3*N大小的集合,其中1-N表示同类关系,N+1-2*N表示捕食关系,2*N+1-3*N表示被捕食关系。遍历每一句话,如果当前这句话符合上述假话中的其中一种,便假话计数加1,如果当前不是假话,则将其归并到话中所说对应的集合中去。题目要我们求给出的所有关系中的假关系(假话),所有假话可以分为三种:所说的动物超出编号;此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。第一行两个整数,N,K,表示有 N 个动物,K 句话。

2022-12-30 15:55:37 201

原创 洛谷-P1525-关押罪犯

对于1-N之间表示第一个监狱,N+1-2*N之间表示第二个监狱。我们可以用种类并查集解决监狱的划分,种类并查集就是把一个集合中的元素根据他们不同的关系进行分类与合并,假如有两个种类:朋友和敌人,即按照朋友的朋友就是朋友,朋友的敌人就是敌人,敌人的朋友就是敌人,敌人的敌人就是朋友的规则进行两个集合的划分。求最小影响值即求尽可能小的罪犯冲突值,给我们m组数据表示两个罪犯如果在一间监狱的冲突值,我们可以将其从大到小排序,让前面冲突值大的罪犯监狱分开,如果不能分开则放在一起,这个冲突值就是市长看到的最小影响值。

2022-12-30 15:25:43 224

原创 洛谷-P1111-修复公路

在此题中,如果当前一组中的x,y点在同一个集合(树)中,则不用处理(不用在修这条路了),如果不在一个集合中,我们就要将这两点归并到一个集合,更新时间。我们可以先将m组数据根据修路所用时间来排序,顺序遍历每一组数据,当前这条路修完后如果满足连接了所有点,则当前这条路所用时间就是我们最终要求的最小时间(因为题中没有说修工队数量问题,即默认不考虑修完上一条路再修下一条路的问题,所有路是同时修的)。下面M行,每行3个正整数x,y,t,告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。

2022-12-30 14:06:45 363

原创 洛谷-2011-聪明的质检员

二分这个大区间,如果中值W计算出来的y

2022-12-30 13:15:00 152

原创 洛谷-P1002-过河卒

第一步我们只能从(0, 0)走到(0, 1)或(1, 0),换句话说(0, 1)和(1, 0)只能由(0, 0)走到,而可以到达起点(0,0)的路径只有它自己一条,记f[0][0] = 1,则第一步走完有f[0][1] = f[0][0] = 1,f[1][0] = f[0][0] = 1。题目给出一个棋盘,棋盘某个位置有一个马,马可以日字型跳跃,该马可跳跃到的和其本身的点称为控制点,要求卒从起点(0,0)出发,只可以向右或向下走,求可以到达目标B点所有的路径条数。NOIP 2002 普及组第四题。

2022-12-25 13:30:00 176

原创 算法竞赛进阶指南 - 回转数字

对于本题,最主要的就是求出估价函数,所谓估价函数就是求最理想的操作,对于本题,最理想的操作显而易见就是每一步操作都可以让中间位置出现一个我们想要的数,这个想要的数当然就是初始状态中间位置出现最多的那个数(1-3之间),我们可以对初始状态中间一圈循环对出现的数进行计数,最终得出出现最多的那个数s,假设s出现了cnt次,因为中间一共就8个数,所以最理想的操作步数就是8-cnt(每步操作都新增一个s)。上一次操作跟本次操作的反操作相同,说明本次操作是上一次的反操作,会相互抵消,之间跳过本操作。

2022-12-24 17:21:11 127

原创 立体推箱子

剩下的便是bfs的基本操作了,用队列展开搜索,但是要注意本题的限制条件较多,需要考虑全面:1.下一步不能越界;2.对于下一步无论变成哪种状态,如果格子是禁地(#)则不能走,跳过这一步;3.下一步状态为0(竖立),还需要保证这一步的格子不能是易碎地面;3.下一步状态为1(横躺),还需要保证其右侧那一格子不能是禁地(#);4.下一步状态为2(竖躺),还需要保证其下侧那一格子不能是禁地(#);5.下一步没有走过。

2022-12-21 22:59:58 203

原创 洛谷-2324-骑士精神

采用双端dfs,因为题目限制最大修改步数是15,分为前一半和后一半,分开进行搜索,如果前一半找到目标状态,则不用对下一半展开搜索。如果前一半未达到目标状态,对于下一半的搜索我们为了避免分支过大,搜索量太大,则逆向思维从后往前搜(从目标状态往回推),对于前一半的状态我们用hashmap存起来,如果逆行搜索达到某个状态和在hashmap中存在,则说明我们当前在后半部分搜索的步数+前7步(前半部分限制的最大步数)就是我们最终找到目标状态所用的总步数。// 从目标状态往前推,目标状态*坐标为(2,2)

2022-12-20 20:09:48 127

原创 Dotcpp-3039-分成互质组

题目 3039: 时间限制: 1s 内存限制: 128MB 提交: 12 解决: 4给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?第一行是一个正整数n。1 ≤ n ≤ 10。第二行是n个不大于10000的正整数。一个正整数,即最少需要的组数。复制614 20 33 117 143 175样例输出复制3 题目要我们求输入的数中互质组的最小个数,互质就是两个数的最大公约数是1,即两数只有1这一个公约数。我们可以边搜索边开新组,首先从第一个组开始,

2022-12-20 15:04:13 85 1

原创 洛谷-1419-寻找段落

所以我们可以从另一方面出发,用二分法对平均值进行二分,每次筛选都会缩短一半的平均值,对于分到手中的这一均值我们用他对数组中的各元素相减,这样我们数组中的元素一定会出现有正有负的元素,对于这样一个数组我们对其求前缀和,对于当前循环拿到的i减去我们在队列维护的那个最小值大于0(这里的i和最小值对象都是下标),就说明我们取得这个平均值是可行的,继续往右侧区域去验证更大的均值是否可行,直到选出最大的那一均值便是我们要的结果。// 因为i一定是比s大的,且i时刻存在于窗口内(s

2022-12-18 19:14:15 99

原创 洛谷-2346-四子连棋

洛谷P2346四子连棋:dfs迭代加深

2022-12-18 14:45:00 161

原创 世界冰球锦标赛

洛谷P4799 [CEOI2015 Day2] 世界冰球锦标赛:双端dfs+剪枝+二分

2022-12-17 20:54:13 188

原创 八数码问题

这里我们可以采用bfs的优化:A*估价函数来搜索,即到达当前状态使用的步数+该位置上的数要达到目标位置所用的步数,本题该距离为曼哈顿距离:| x - x0 | + | y - y0 |(其中(x, y)为点在矩阵中的当前位置,(x0, y0)为目标位置坐标),因为是在矩阵上下左右移动,所以距离间的差值是坐标差值,即曼哈顿距离。static int f(String s) { // 计算状态s的估计值: dist + (|x - x0| + |y - y0|)// 计算序列中的位置所对应的下标。

2022-12-12 12:00:00 224 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除