- 博客(161)
- 收藏
- 关注
原创 P1180 驾车旅游
该程序计算自驾游途中最少的加油和餐饮费用。输入包含总路程、油箱容量、油耗率、初始加油费和加油站信息。程序采用递归算法,考虑在每个加油站是否加油(根据油箱剩余油量是否过半决定),并累加加油费和20元餐饮费。通过剪枝优化,避免不必要的计算。最终输出精确到0.1元的最小费用。示例输入600公里行程,3个加油站,输出最小费用13133.2元。
2025-09-13 08:31:09
254
原创 C++ 指针
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:在这里,type是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明:int *ip;/* 一个整型的指针 */double *dp;
2025-07-19 09:12:38
413
原创 P1176 路径计数2
摘要:该问题要求在N×N网格中从左上角(1,1)到右下角(N,N)的路径数,其中存在M个障碍格子不可通过。使用动态规划方法,初始化时标记所有障碍点,然后通过状态转移方程dp[i][j]=(dp[i-1][j]+dp[i][j-1])%100003计算路径数,最终输出结果。算法时间复杂度为O(N²),适用于N≤1000的情况。
2025-07-02 10:47:10
380
原创 C++ 函数
C++ 中的函数定义的一般形式如下:在 C++ 中,函数由一个函数头和一个函数主体组成。一个函数可以返回一个值。是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字void。这是函数的实际名称。函数名和参数列表一起构成了函数签名。参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。函数主体包含一组定义函数执行任务的语句。
2025-07-02 10:41:26
967
原创 P1175 表达式的转换
后缀标记法:书写表达式时采用运算紧跟在两个操作数之后,从而实现了无括号处理和优先级处理,使计算机的处理规则简化为:从左到右顺序完成计算,并用结果取而代之。平常我们书写的表达式称为中缀表达式,因为它将运算符放在两个操作数中间,许多情况下为了确定运算顺序,括号是不可少的,而后缀表达式就不必用括号了。若干个后缀表达式,第 i+1 行比第 i 行少一个运算符和一个操作数,最后一行只有一个数字,表示运算结果。编写一个程序,完成这个转换,要求输出的每一个数据间都留一个空格。其他同优先级的运算是从左向右结合的,即。
2025-07-02 10:35:29
414
原创 P1174 打砖块 题解
自己驾车旅游时总会碰到加油和吃饭的问题,在出发之前,驾车人总要想方设法得到从一个城市到另一个城市路线上的加油站的列表,列表中包括了所有加油站的位置及其每升的油价(如 3.25 元/L)。现在要你帮忙做的就是编写一个程序,计算出驾车从一个城市到另一个城市的旅游在加油和吃饭方面最少的费用。对于 50% 的数据,满足 1≤n,m≤200,1≤k≤200,所有的字符 c 都为。对于 20% 的数据,满足 1≤n,m≤5,1≤k≤10,所有的字符 c 都为。输出一个实数,即精确到 0.1 元的最小的加油和吃饭费用。
2025-06-30 09:56:15
1020
原创 P1197 [JSOI2008] 星球大战
现在,反抗军首领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出每一次打击之后反抗军占据的星球的连通块的个数。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。接下来的 m 行,每行包括两个整数 x,y,表示星球 x 和星球 y 之间有 “以太” 隧道,可以直接通讯。接下来的 k 行,每行一个整数,表示经过该次打击后现存星球的连通块个数。很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。
2025-06-25 09:06:20
353
原创 P1171 售货员的难题
某乡有 n (2≤n≤20) 个村庄,有一个售货员,他要到各个村庄去售货,各村庄之间的路程 s (0<s<1000) 是已知的,且 A 村到 B 村与 B 村到 A 村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为 1,他不知道选择什么样的路线才能使所走的路程最短。请你帮他选择一条最短的路。由于村庄数量 (n) 最大为 20,状压 DP 可以在可接受的时间复杂度内解决此问题。第一行,第 i+1 行第 j 个数代表村庄 i 到 j 的单向路径的路程。
2025-06-24 20:08:21
491
原创 P1170 兔八哥与猎人
第一行为 n,表示有 n 组数据,每组数据的第一行为两个正整数 ax 和 ay,表示猎人的位置,第二行为两个正整数 bx 和 by,表示兔八哥的位置。果园有 M×N 棵树,组成一个 M 行 N 列的矩阵,水平或垂直相邻的两棵树的距离为 1。,当且仅当两点横、纵坐标差值的最大公约数为 1 时,两点连线上没有其他整数坐标点(即没有其他果树)。如果猎人与兔八哥位置的连线上没有其它的果树,猎人就可以看到兔八哥。现己知猎人和兔八哥的位置,编写程序判断兔子所在的位置是否安全。表示兔八哥的位置是否安全。
2025-06-24 19:32:23
387
原创 P1167 刷题
注意一下:我一开始WA了两个大数据的点,是因为最后输出的时候,直接在else里输出,这样如果是极大数据的话,根本就进不去else那里,导致输出为空,请大家引以为戒。你想啊,我们可以先处理出天数然后×1440(24*60,一天的分钟数),然后再处理每天的分钟。时间紧张小 A 只管数量不管质量。贪心的部分我就不讲了,这道题的难点已经说完了,这道题的贪心如果想不出来还是退役多练练吧。然后我们会发现,我们多处理了起始年的前半年,少处理了终止年的前半年。同理,我们多处理了起始月的前半个月,少处理了终止月的前半个月。
2025-06-13 17:38:37
894
原创 P1198 [JSOI2008] 最大数
功能:将 n 加上 t,其中 t 是最近一次查询操作的答案(如果还未执行过查询操作,则 t=0),并将所得结果对一个固定的常数 D 取模,将所得答案插入到数列的末尾。在将一个数插入单调队列时,我们可以将被删除的数的父亲标记为插入的数,在查找时只需要找到查找的数的根,根上的数值即为答案。单调栈的部分就不用讲了,楼下的dalao们使用的单调栈加二分查找,已经讲的够清楚的了,所以我们直接讲并查集部分。功能:查询当前数列中末尾 L 个数中的最大的数,并输出这个数的值。注意:初始时数列是空的,没有一个数。
2025-06-06 20:24:55
336
原创 P1954 [NOI2010] 航空管制
对此,小 X 表示很不满意。第二类(相对起飞顺序限制):存在一些相对起飞顺序限制 (a,b),表示航班 a 的起飞时间必须早于航班 b,即航班 a 的起飞序号必须小于航班 b 的起飞序号。接下来 m 行,每行两个正整数 a 和 b,表示一对相对起飞顺序限制 (a,b),其中 1≤a,b≤n,表示航班 a 必须先于航班 b 起飞。虽然航班 4,5 没有相对起飞顺序限制,但是由于航班 1,2,3 都必须安排在前 3 个起飞,所以 4,5 最早只能安排在第 4 个起飞。
2025-06-06 19:59:20
804
原创 求n个数中每个数出现的次数
【入门】求n个数中每个数出现的次数描述从键盘读入n个整数(n<=100),这n个数都是1~10之间的数,请从小到大输出每个出现过的数,以及统计出每个数出现的次数?比如:假设读入5个数,分别为1 2 3 3 5,统计结果如下:1出现1次,2出现1次,3出现2次,5出现1次。输出格式如下:1 12 13 25 1输入描述第1行输入一个整数n。第2行输入n个整数,用空格隔开。输出描述输出若干行,每行2个数,用空格隔开,按照从小到大的顺序,输出每个数以及每个数出现的次数。
2025-06-06 19:52:01
507
原创 P1166 打保龄球
总之,若―轮中一次滚球或两次滚球击倒十个柱,则本轮得分是本轮首次滚球开始的连续三次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。下面以实例说明如下(字符。如果这两次滚球击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加一次滚球),该轮得分为这两次共击倒柱数 10 与以后一次滚球所击倒柱数之和。表示击倒当前球道上的全部的柱,否则用一个数字字符表示本次滚球击倒的当前球道上的柱的数目,两轮滚球之间用一个空格字符隔开。若某一轮两次滚球未击倒全部十个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数之和。
2025-06-06 19:19:49
450
原创 P1165 日志分析
目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志。该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次入库的集装箱重量;第二类操作为集装箱的出库操作。集装箱入库和出库的规则为先进后出,即每次出库操作出库的集装箱为当前在仓库里所有集装箱中最晚入库的集装箱。分析日志时,每遇到一次查询操作,都要报告出当前仓库中最大集装箱的重量。本题可以使用栈来模拟集装箱的进出库操作,同时使用一个辅助栈来记录每个时刻仓库中最大集装箱的重量。当仓库为空时你应该忽略出库操作,当仓库为空查询时你应该输出 0。
2025-06-02 17:17:57
296
原创 P1164 小A点菜
餐馆虽低端,但是菜品种类不少,有 N 种 (N≤100),第 i 种卖 ai 元 (ai≤1000)。由于是很低端的餐馆,所以每种菜只有一份。这是一个典型的 0 - 1 背包问题变种,要求在给定预算的情况下,计算刚好花完所有钱的点菜方案数。小 A 奉行“不把钱吃光不罢休”的原则,所以他点单一定刚好把 uim 身上所有钱花完。第二行起 N 个正数 ai(可以有相同的数字,每个数字均在 1000 以内)。一个正整数,表示点菜方案数,保证答案的范围在 int 之内。,表示不点菜花费 0 元的方案数为 1。
2025-06-02 17:11:20
449
原创 P1163 银行贷款
在每月利率 (r) 的情况下,第 (i) 个月还款后剩余欠款金额 (w_i) 的递推公式为 (w_i = w_{i - 1}(1 + r)-w),初始时 (w_0) 为贷款原值,经过 (m) 个月还清贷款,即 (w_m = 0)。我们可以通过二分查找在可能的利率范围 ([0, 3])(因为答案不超过 (300.0%))内找到满足 (w_m = 0) 的月利率 (r)。这个问题要求计算出贷款者向银行支付的利率。设月利率为 (r),贷款原值为 (w_0),每月还款金额为 (w),还款总月数为 (m)。
2025-06-02 17:07:19
571
原创 P1162 填涂颜色
解题的核心思路是从方阵的边界上值为 0 的点开始搜索,将所有能到达的 0 标记为一个特殊值(比如 3),这些点就是方阵外部的 0。搜索完成后,方阵中剩余的 0 就是闭合圈内的 0,将它们赋值为 2 即可。由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。如果从某个 0 出发,只向上下左右 4 个方向移动且仅经过其他 0 的情况下,无法到达方阵的边界,就认为这个 0。接下来 n 行,由 0 和 1 组成的 n×n 的方阵。的 0 是连通的(两两之间可以相互到达)。
2025-06-02 17:01:33
438
原创 P1161 开灯
具体思路是用一个数组来记录每盏灯被按动开关的次数,由于灯的状态改变取决于按动次数的奇偶性,所以最后只需要找出被按动奇数次的那盏灯即可。在小明进行了 n 次操作后,小明突然发现,这个时候只有一盏灯是开的,小明很想知道这盏灯的编号,可是这盏灯离小明太远了,小明看不清编号是多少。数据保证,在经过 n 次操作后,有且只有一盏灯是开的,不必判错。其中 ai 是实数,小数点后一定有 6 位,ti 是正整数。在一条无限长的路上,有一排无限长的路灯,编号为 1,2,3,4,…在刚开始的时候,所有的灯都是关的。
2025-06-02 16:56:07
371
原创 C++ 内存管理库 <new>
C++ 是一种功能强大的编程语言,它提供了丰富的标准库来帮助开发者更高效地编写代码。在 C++ 中,<new>是一个非常重要的头文件,它包含了用于动态内存分配的函数和异常类型。动态内存分配允许程序在运行时请求内存,这在处理不确定大小的数据结构时非常有用。
2025-05-31 09:32:23
962
原创 P1158 [NOIP 2010 普及组] 导弹拦截
此时第一个拦截系统拦截了6个导弹,那么第1~5枚导弹也一定被拦截了(我们已经将导弹按照距第一个拦截系统的距离从小到大排序了),那么此时第一个拦截系统的半径最小就是距离第 i 小的导弹的距离,那么第7,8小的导弹就由第二个拦截系统覆盖,我们再找这两个导弹中距离第二个拦截系统最大的那个作为第二个拦截系统的半径;大体思路: 我们可以先让第一个拦截系统将所有导弹全部拦截,此时的答案就是第一个系统到最远的点的距离,然后依次去掉最远的导弹让第二个拦截系统拦截,同时注意取最小值,然后再输出最小值就好啦;
2025-05-30 19:06:54
1138
原创 P1157 组合的输出
排列与组合是常用的数学方法,其中组合就是从 n 个元素中抽出 r 个元素(不分顺序且 r≤n),我们可以简单地将 n 个元素理解为自然数 1,2,…,n,从中任取 r 个数。这是一个典型的组合生成问题,可以使用回溯算法来解决。回溯算法通过递归的方式尝试所有可能的组合,在满足条件时输出结果。所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。一行两个自然数 n,r(1<n<21,0≤r≤n)。输出占 3 个场宽的数 x。现要求你输出所有组合。
2025-05-30 19:00:56
340
原创 P1156 垃圾陷阱
假设卡门预先知道了每个垃圾扔下的时间 t(1≤t≤1000),以及每个垃圾堆放的高度 h(1≤h≤25)和吃进该垃圾能增加维持生命的时间 f(1≤f≤30),要求出卡门最早能逃出井外的时间,假设卡门当前体内有足够持续 10 小时的能量,如果卡门 10 小时内(不含 10 小时,维持生命的时间同)没有进食,卡门就将饿死。不然 这个高度+这个垃圾的高度 的生命值=max(d~0的生命值),即不吃垃圾用它来堆,此时高度+=这个垃圾的高度。这个高度的生命值+=吃这个垃圾增长的生命值,即吃垃圾,此时高度不变。
2025-05-30 18:57:21
245
原创 P1155 [NOIP 2008 提高组] 双栈排序
本文研究了利用双栈对序列进行排序的问题。给定一个1~n的排列P,通过两个栈S1和S2的四种操作(压入/弹出)实现升序排列。研究发现,该问题可转化为二分图染色问题:将不能共存的元素连边,若可二分图染色则存在解。字典序最小操作序列的获取采用贪心策略:优先操作第一栈,在push时不立即pop,仅在需要时按优先级处理。算法复杂度为O(n²),解决了n≤1000的排序问题,并给出了正确的操作序列生成方法。
2025-05-30 18:53:01
916
原创 P1155 三国游戏
看到贪心题点进来的,本来以为纯贪心,写挂了后发现还掺了点博弈论。。。最后推衍了半天才想出正解。正好看到题解开放了,就顺便写个题解纪念一下吧。
2025-05-24 10:40:07
522
原创 P1154 奶牛分厩
农夫约翰有 N(1≤N≤5000) 头奶牛,每头奶牛都有一个唯一的不同于其它奶牛的编号 si,所有的奶牛都睡在一个有 K 个厩的谷仓中,厩的编号为 0 到 K−1。每头奶牛都知道自己该睡在哪一个厩中,因为约翰教会了它们做除法,SimodK 的值就是第 i 头奶牛所睡的厩的编号。也可以a%k=b%k 等价于 a-b=0(mod k)。首先a,b在mod k 意义下同余,当且仅当 k|(a-b) 即k是(a-b)的一个因子。一个整数,表示要求的最小的 K,对所有的测试数据这样的 K 是一定存在的。
2025-05-24 10:35:46
311
原创 P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here
他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?关于如何搭配的细节会在下面告诉你;你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的 UFO 带走。小组名和彗星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中 A 是 1,Z 是 26。写出一个程序,读入彗星名和小组名并算出用上面的方案能否将两个名字搭配起来,如果能搭配,就输出。第1行:一个长度为 1 到 6 的大写字母串,表示彗星的名字。
2025-05-24 10:22:10
460
原创 P1153 点和线
也就是说从AC到AD的方向与从BC到BD的方向不同,从CA到CB的方向与从DA到DB的方向也不同。简单来说:两个向量a和b的向量积是一个向量,记作a×b,其模等于由a和b作成的平行四边形的面积,方向与平行四边形所在平面平面垂直,当站在这个方向观察时,a逆时针转过一个小于π的角到达b的方向。这个方向也可以用物理上的右手螺旋定则判断:右手四指弯向由a转到b的方向(转过的角小于π),拇指指向的就是向量积的方向:从被乘数抓向乘数。本题的搜索方式不难想到,即每次枚举一点与当前点连线,然后判断这条是否与已连的线相交。
2025-05-24 10:16:31
1010
原创 P1152 欢乐的跳
使用存储输入的数组,存储[1, n - 1]每个差值是否出现,方便标记和检查。通过abs函数计算相邻元素差的绝对值,确保差值为正数。遍历数组计算差值并标记,再遍历标记数组检查是否所有差值都出现,逻辑清晰。
2025-05-24 10:12:05
236
原创 P1151 子数整数
对于一个五位数 a1a2a3a4a5,可将其拆分为三个子数:例如,五位数 20207 可以拆分成sub1=202sub3=207现在给定一个正整数 K,要求你编程求出 10000 到 30000 之间所有满足下述条件的五位数,条件是这些五位数的三个子数 sub1,sub2,sub3 都可被 K 整除。
2025-05-24 10:09:35
326
原创 P1150 Peter 的烟
思路是模拟吸烟和换烟的过程,先将初始烟数计入总数,吸烟产生的烟蒂去换烟,新烟吸完又产生烟蒂,不断重复这个过程,直到烟蒂数不足以换烟为止。Peter 有 n 根烟,他每吸完一根烟就把烟蒂保存起来,k(k>1)个烟蒂可以换一个新的烟,那么 Peter 最终能吸到多少根烟呢?该代码时间复杂度为 $O(log_k n)$,空间复杂度为 $O(1)$,能处理。与某些脑筋急转弯不同的是,Peter 并不能从异次元借到烟蒂,抽完后再还回去。在 $1$ 到 $10^8$ 范围内的数据。
2025-05-24 10:05:30
739
原创 P1142 轰炸
klux 要想轰炸某个区域内的一些地方,它们是位于平面上的一些点,但是(显然地)klux 遇到了抵抗,所以 klux 只能飞一次,而且由于飞机比较破,一点起飞就只能沿直线飞行,无法转弯。现在他想一次轰炸最多的地方。本题可通过枚举任意两个点确定一条直线,再统计该直线上点的数量,最终找出覆盖点数最多的直线。接下来 n 行,每行有一对整数,表示一个点的坐标。事实上,klux 面对的是一个很简单的问题,但是他实在太菜了。一个整数,表示一条直线能覆盖的最多的点数。对于全部数据,保证 1≤n≤700。
2025-05-23 20:00:51
309
原创 P1141 01迷宫
由于不同起点可能会到达相同的连通区域,为了避免重复计算,可以使用并查集来优化,将同一个连通区域的格子合并,记录每个连通区域的大小,查询时直接输出对应连通区域的大小。有一个仅由数字 0 与 1 组成的 n×n 格迷宫。若你位于一格 0 上,那么你可以移动到相邻 4 格中的某一格 1 上,同样若你位于一格 1 上,那么你可以移动到相邻 4 格中的某一格 0 上。接下来 m 行,每行两个用空格分隔的正整数 i,j,对应了迷宫中第 i 行第 j 列的一个格子,询问从这一格开始能移动到多少格。
2025-05-23 19:58:32
269
原创 P1140 相似基因
每行首先是一个整数 n,表示基因序列的长度;隔一个空格后是一个基因序列,序列中只含 A,C,G,T 四种字母。相似度为:(−3)+5+5+(−2)+5+(−1)+5=14。规定两个基因的相似度为所有对应方法中,相似度最大的那个。那么相似度就是:(−3)+5+5+(−2)+(−3)+5+(−3)+5=9。在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度。这是一个典型的动态规划问题,我们可以通过构建二维数组来存储不同位置碱基匹配时的最大相似度。仅一行,即输入基因的相似度。
2025-05-23 19:56:08
387
原创 P1139 单向双轨道
输出为一系列操作过程,每一行形如 h,L,R 的字母序列,其中 h 为火车编号,L 为 h 车原先所在位置(位置都以A,B,C,D 表示),R 为新位置。如图所示,某火车站有 B、C 两个调度站,左边入口 A 处有n 辆火车等待进站(从左到右以 a,b,c,d 编号),右边是出口 D,规定在这一段,火车从 A 进入经过 B、C 只能从左向右单向开,并且 B、C 调度站不限定所能停放的车辆数。可以调度则输出最短的调度序列,当有多种方案时输出按操作 (L,R) 字典序最小的方案,不可以调度时则输出。
2025-05-23 19:52:21
325
原创 P1138 第 k 小整数
现有 n 个正整数,要求出这 n 个正整数中的第 k 个最小整数(相同大小的整数只计算一次)。会自动去重并排序,能将时间复杂度优化到 $O(n log n)$。第一行为 n 和 k;第二行开始为 n 个正整数的值,整数间用空格隔开。本题可先对输入的正整数进行去重处理,再对去重后的数组进行排序,最后根据。n≤10000,k≤1000,正整数均小于 30000。第k个最小整数的值;
2025-05-23 19:47:49
290
原创 P1143 进制转换
共三行,第一行是一个正整数,表示需要转换的数的进制 n (2≤n≤16),第二行是一个 n 进制数,若 n>10 则用大写字母 A∼F 表示数码 10∼15,并且该 n 进制数对应的十进制的值不超过 109,第三行也是一个正整数,表示转换之后的数的进制 m (2≤m≤16)。本题可分两步完成不同进制数之间的转换:先将给定的。请你编一程序实现两种不同进制之间的数据转换。进制数转换为十进制数,再将十进制数转换为。一个正整数,表示转换之后的 m 进制数。
2025-05-23 19:36:07
494
原创 P1144 最短路计数
共 N 行,每行一个非负整数,第 i 行输出从顶点 1 到顶点 i 有多少条不同的最短路,由于答案有可能会很大,你只需要输出 ansmod100003 后的结果即可。当一个点不能被当前点更新时,判断如果这个点的距离等于当前点距离+1的话,那么就如同上面的情况,可到达这个点的最短路有一种是通过先到达上个点再走当前边的方式得到的,那么我们就把这个情况加上,可得代码。1 到 5 的最短路有 4 条,分别为 2 条 1→2→4→5 和 2 条 1→3→4→5(由于 4→5 的边有 2 条)。2.ans[1]=1。
2025-05-23 19:24:06
276
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅