- 博客(85)
- 收藏
- 关注
原创 2001NOIP普及组真题 1. 数的计数
其实这里包含了 f[3]=2, f[2]=2, f[1]=1, 以及6本身。2、综上所述,我们可以从 f[1] 开始逐步计算每个 f[i],直到 f[N](时间复杂度是。当6前面放3的时候,那3有多少种可能性,就都可以叠加在这里。即 f[6] += f[3]同理,当6前面放2的时候,2的所有可能性也都叠加在这里 f[6] += f[2]同理,当6前面放2的时候,2的所有可能性也都叠加在这里 f[6] += f[1]注解:按照题意,6前面的数字只能是3,2,1,或者不放(不放就是6本身)
2024-06-22 21:45:51 560
原创 2001NOIP普及组真题 3. 求先序排列
int left_pos, int right_pos:待构建树的后序遍历的左右坐标。int left_mid, int right_mid:待构建树的中序遍历的左右坐标。第三步、根左侧的都为左子树,右侧的都为右子树。对左子树和右子树分别再次递归。3、构建树的核心是:通过递归,根据后序遍历和中序遍历构建树。第一步、后序遍历的最后一个一定是根。第二步、在中序遍历中找到根。解法一、使用字符数组 构建树。解法二、使用字符串 构建树。解法三、不构建树,直接输出。2、构建的方法,可以使用。
2024-06-11 22:31:19 387 1
原创 2001NOIP普及组真题 4. 装箱问题
step2、本题没有提到价值w,但我们可将每个物品的体积 v 等价于每个物品的价值w。step3、所以箱内物品的体积和最大,即为箱内物品的总价值最大。step1、要求箱子的剩余空间为最小,即要求。
2024-06-11 22:26:01 547
原创 2002NOIP普及组真题 2. 选数
2、定义一个函数 dfs 来进行深度优先搜索。在dfs函数中,通过递归的方式遍历所有可能的组合,并计算每个组合的和。1、使用 模板函数 isPrime() 来判断一个数是否为素数。否则,就对剩余的 [id+1, n] 个数继续进行枚举深搜。如果已选了k个数,且和正好为素数,则 ans 加 1。如果坐标 id 超过n,则越界,返回。
2024-06-10 18:21:04 297
原创 2002NOIP普及组真题 3. 产生数
具体方法:对 0 ~ 9 每一个数字执行一次 dfs,统计该数字发生的变体数量(最终要加上自己,比如 2 →3,3 →5,则最终该位置有 3 种数字的变体(分别为3,5和自身2)),所以 n 的位数可达31位,每一位都有 [1 ~ 10] 种变体,所以 10*10*10…为 2*2*2 = 8 种。故,只要求出每一位数字有多少种变体即可。3、最终结果 = 每一位变体数量的乘积。如 2*2*2 = 8 种。1、如果一个数字有 3 位,每位有 2种可能性,则数字的。4、最后注意结果为逆序输出。
2024-06-10 15:00:23 536
原创 2002NOIP普及组真题 4. 过河卒
从起点开始向下深搜,令 dfs(x, y) 的返回值表示从(x, y)到终点的路径数,则 dfs(x, y) = dfs(x + 1, y) + dfs(x, y + 1);如果已经在,就不要重复入队列,只需要更新该(i, j)的 f[i][j] 即可。这样一来,当(i , j)从队列中弹出并参与向后传递时,f[i][j] 的数值是完整的。令 f[i][j] 表示从(0, 0)走到(i, j)的方案数,则 f[n][m]就是最终要输出的方案数。dp[0][0]为1,表示自己到自己有1种方法。
2024-06-09 16:47:26 1163
原创 2003NOIP普及组真题 3. 数字游戏
,通过这种方式可以将环形结构上的动态规划问题转化为线性结构上的动态规划问题,然后使用线性动态规划的方法进行求解。如上图所示,设左区间端点是L,右区间端点是R,在L和R之间找一点 J来区分最后一段。表示从 L 到 R 这段长度为 R - L + 1 的连续序列划分为 K 组的。表示从 L 到 R 这段长度为 R - L + 1 的连续序列划分为 k 组的。结构上的动态规划问题,是一种特殊的区间动态规划问题。1、L -> J 为 K - 1 段,所以。2、J+1 -> R为最后1段,所以。
2024-06-08 16:51:53 1180
原创 2003NOIP普及组真题 2. 栈
故,若记入栈为0,出栈为1,则合法的任意前缀变为:0的数量不可能小于1的数量)故,若记左括号为0,右括号为1,则合法的任意前缀变为:0的数量不可能小于1的数量)f[1][1]=1:进栈1个元素,出栈1个元素。1、设 f[i][j]: i表示进栈的个数,j表示“进栈的i个”中出栈的个数。f[1][0]=1:进栈1个元素,出栈0个元素。问题:给定长度为n的仅包含01的字符串,任意前缀中0的数量不小于1的数量的组合方式有多少种。5、最后要输出的结果就是 f[n][n],表示进栈n个,出栈n个的可能性。
2024-06-08 07:36:09 1105
原创 2003NOIP普及组真题 4. 麦森数
具体来说,开始时 res = 1,然后遇到二进制位为 1 时,就将当前的 a 乘到 res 上,同时 a 不断平方。在计算过程中,我们可以从低到高逐步计算,每一步将当前 a 的平方,同时根据二进制位决定是否累乘到结果中。,我们可以发现,从右往左看二进制位,如果是1,就乘以对应的幂次的 a,如果是 0,就不乘。如果一个数 是10000,则它的位数是。如果一个数 是 999,则它的位数是。如果一个数 是1000,则它的位数是。所以,如果一个数是x,则 它的位数是。如果一个数 是100,则它的位数是。
2024-06-07 12:11:34 1233
原创 2004NOIP普及组真题 2. 花生采摘
3、每一次采摘完,记录耗时 t 以及采集的花生总数 ans。同时考虑排序后的下一个节点,如果采摘后返回路边时间足够,则执行下一次采摘;如果采摘后来不及返回路边,则不再进行下一次采摘,本次直接返回路边即可。4、注意,第一次是否需要采摘可进行特判。for 循环中从花生第二多的节点开始。2、因为本题严格限制了顺序,所以先把每个节点的花生数量按。然后逐一判断下一个花生是否需要去采摘即可。
2024-06-06 08:14:02 346
原创 2004NOIP普及组真题 3. FBI树
3、牢记输出树的模板代码。核心在于 cout << node[r].val 的位置。这一行放前面就是前序遍历,放后面就是后续遍历,放中间就是中续遍历。的最后一层叶子节点),将树的每一个节点的值用字母“F、B、I”表示。3、如果树的左右子树的叶子节点有0也有1,则根节点为 F;2、如果树的左右子树的叶子节点都是1,则根节点为 I;1、如果树的左右子树的叶子节点都是0,则根节点为B;如果第二个参数不传,则默认截取到末尾。1、由于给出的字符串长度为。本题的意思是:给定一个。
2024-06-05 21:35:08 608
原创 2005NOIP普及组真题 3. 采药
1、题与 2006 年普及组第2题《开心的金明》一样,考察的都是01背包。2、直接套用01背包的一阶模板即可。b、每件物品的采药时间。
2024-06-03 12:23:36 231
原创 2005NOIP普及组真题 4. 循环
4、再找倒数第四位 1 的循环节。为了保证每次循环末三位保持 234 不变,故每一轮要以。2、再找倒数第二位 3 的循环节。为了保证每次循环最后一位都保持 4 不变,故每一轮要以。3、再找倒数第三位 2 的循环节。为了保证每次循环末两位保持 34 不变,故每一轮要以。假设一个数的末尾四位数字为 1234,要求 1234 的循环节。2、本题要求的是末 k 位的循环节长度。1、先判断最后一位 4 的循环节,假设找到是x,即。的末四位保持 1234 不变。的末三位保持 234 不变。的末两位保持 34 不变。
2024-06-03 08:22:20 1223
原创 2006NOIP普及组真题 1. 明明的随机数
4、基于第2点和第3点,如果需要知道数组中不重复元素的个数,需要用unique返回的迭代器减去数组的起始地址,即。以上两个要求正好可以使用 set 来实现。set 自带了去重和排序的功能。输出时使用 iterator 即可。函数,包含于 <algorithm> 头文件中。所以,如果利用unique实现去重的功能,需要注意。因为unique只对相邻的重复元素有效;重复元素,只是将重复元素。3、unique返回的是。
2024-06-01 17:25:04 745
原创 2006NOIP普及组真题 2. 开心的金明
3、每件物品的价格v乘以权重w作为该物品的价值。2、每件物品的价格 v 看成占用背包的体积。1、限定金额看成背包总容量。
2024-06-01 16:15:35 399
原创 2006NOIP普及组真题 4. 数列
从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。
2024-06-01 13:19:11 1235
原创 2006NOIP普及组真题 3. Jam的计数法
由规则②可知,第 w-2 位必须比第 w-3 位大,所以第 w-2 位最少是9,第 w-1 位最少是A;由规则②可知,第 w-3 位必须比第 w-4 位大,所以第 w-3 位最少是4,第 w-2 位最少是5,第 w-1 位最少是6;由规则②可知,第 w-1 位必须比第 w-2 位大,所以第 w-1 位最少是A;由规则②可知,第 w 位必须比第 w-1 位大,但已经没有比A更大的,所以第 w-1 位的9也不能+1。第 w-4 位 第 w-3 位 第 w-2 位 第 w-1 位 第 w 位。
2024-06-01 09:43:22 1184
原创 2007NOIP普及组真题 4. Hanoi双塔问题
4、根据 ① 式,我们可推出 f[1] = 2, f[2] = 6, f[3] = 14, f[4] = 30。我们利用stringstream对象的自动类型转换,它的内部有一个string的流对象缓冲区。2、由于本题是双塔,每个圆盘有两个,所以Step2的第 i+1 个要移动两次,即。(以上为瞪眼法推导结果,至此写出的代码,可拿25分)a. 用字符数组 s[] 来存储计算结果的每一位,2、本题不需要输出移动的顺序,只是输出。6、但本题的 n 会取到200,5、所以,我们只要根据 n ,
2024-05-22 21:04:53 828
原创 2007NOIP普及组真题 3. 守望者的逃离
1、闪烁耗费1秒,可以增加距离60米,但是恢复10点魔法值还需要2.5秒,所以闪烁的平均速度为 60m/3.5s = 17.14m/s > 跑步的速度17m/s。3、所以,先按照最快的闪烁,计算每一秒钟能出现的位置(闪烁的秒,位置+60;最后用跑步来修正每一次等待过程中的距离(等待的秒,可以用跑步+17来更新距离)我们假设有两个人,a只负责闪烁来更新魔法充足时刻的最远距离,b负责在上一秒的最远距离 + 跑步来更新其他秒的最远距离。本质和动态规划一样,因为在魔法充足的那一秒,一定是闪烁远;
2024-05-21 21:06:12 541
原创 2007NOIP普及组真题 2. 纪念品分组
第二步、每一次从两端取数:大的一定放在组里,小的是否放需要分析总和是否超过w。第三步、两端端点向中间移动,直到两端点相遇。,所以本题不需要使用背包,可以直接贪心。
2024-05-21 20:34:04 314
原创 繁忙的都市
阶段2:由于k点是新加入的白点,所以要更新剩余蓝点到白点的 minv,以备下一轮使用。Kruskal 算法:每一轮找边权最小的,且端点根节点不同的,将其合并(并查集)step3、合并一次就是找到一条边,当找到 n-1 条边时,结束循环。阶段0:初始化(minv[], vis[], minv[1])step2、for循环边,如果边的两个端点分属不同阵营,则合并。阶段1:在剩余蓝点中找出 minv 最小的点 k。step1、根据边权v,对边进行升序排序。Prim 算法:蓝白点。
2024-05-18 17:02:11 560
原创 最短网络(agrinet)
i++) // cnt为边的数量。循环所有已从小到大排序的边。if 这是一条u,v不属于同一集合的边(u,v)(因为已经排序,所以必为最小),①合并u,v所在的集合,相当于把边(u,v)加入最小生成树。④如果k=n-1,说明最小生成树已经生成,则break;6、结束,ans即为最小生成树的总权值之和。4、计数器 k=0,记载当前找到几条边;3、将所有边从小到大排序(sort)。2、初始化输出结果ans=0。
2024-05-17 11:07:39 770
原创 打击犯罪(black)
线上OJ:1、如果按照题意,从1~k的顺序进行删除(枚举),则每次枚举完都要重置并查集,比较麻烦。2、考虑, 不从1 ~ k 顺序删除,而是从 n ~ k 逆序往图中添加。a. 如果添加到 k 时,最大集合的元素数量不超过 n/2 ,则说明k还可以继续减小b. 如果添加到 k 时,最大集合的元素数量开始超过 n/2,则这个 k 点不能加入,也就是说:这个k点必须删除备注:这个点k就是题目要求的k的最小值。因为把k删除后,最大集合的元素数量不超过 n/2;如果把比k大的元素删除,更加不会超过n/2。3、初始化
2024-05-16 08:45:34 546
原创 团伙(Group)
这句话说明,如果 a 和 b 是敌人,a 和 c 也是敌人,则 c 和 b 就是朋友。如果 a 和 d 也是敌人,则 d 和 {c, b} 都是朋友。2.2 如果 a 和 x 是敌人,但 a[i] 数组为空,则把 x 赋值给 a[i],作为它的第一个敌人。用一个数组 a[i] 记录第 i 个人的敌人(只需记录一个即可,因为合并时会合并他们的根节点)。3、最后判断有几个团伙时,只要数下有几个根即可(p[i]==i 的为根)。2.1 所以当 a 和 x 是敌人时,
2024-05-15 14:15:06 327
原创 2008NOIP普及组真题 3. 传球游戏
令 dp[i][j] 表示(从1号开始)经过 j 次传球后,球在i号手里的方案总数。即:第 i 个点 j 次的方案总数等于前后两个点 j-1 次的方案数总和。这道题也可以采用深搜dfs来完成。,否则会Time limit。
2024-05-14 13:38:59 1964
原创 2008NOIP普及组真题 2. 排座椅
4、对row[i]进行降序排序,挑选最大的k个进行输出(输出时按照id的升序进行输出);同理,对col[i]进行降序排序,挑选最大的L个进行输出(输出时按照id的升序进行输出)如果是在同一列,则更新col[i]1、假设第 i 行和第 i+1 行之间有 2 组交头接耳的学生对,则 row[i] = 2,表示第i行 和第i+1行有2组;2、假设第 i 列和第 i+1 列之间有 5 组交头接耳的学生对,则 col[i] = 5,表示第i列 和第i+1列有5组;
2024-05-13 20:12:49 317
原创 2008NOIP普及组真题 1. ISBN号码
5、如果 sbm 为个位数字,则将其转为字符,并比较ISBN的最后一位 s[12];如果 sbm 为10,则sbm为’X’1、一次性读入字符串,将每一个字符单独转换为数字处理。4、sum 完成后,对11取模作为识别码(sbm)3、如果读入的是 ‘-’,则跳过找下一个数字。并 sum += 数字 * i++2、如果读入的是数字,则。6、最后比较输出即可。
2024-05-12 08:26:26 247
原创 2008NOIP普及组真题 4. 立体图
由于前面的遮挡后面的,上面的遮挡下面的,右面的遮挡左面的。答:我们发现:第 i 行第 j 列的矩形的左下角顶点位于画板的第。方法一个一个画小方块(虽然画的是立体空间的积木,但本质还是。答:我们发现,画布的宽度。2、如何确定每个积木的。
2024-05-10 22:57:02 1049
原创 2009NOIP普及组真题 2. 分数线划定
一本通:http://ybt.ssoier.cn:8088/problem_show.php?,则实际输出会多于k个人。
2024-05-09 10:27:23 438
原创 2009NOIP普及组真题 4. 道路游戏
dp[t-k] + value - cost[st]:表示k步前的最优解,加上这k步所收集到的金币,减去k步前买机器人的花费。由于dp[t]的最优解一定发生在经过了k步后的某个i号工厂。一、题目要求的是 “经过m 个单位时间后,扣除购买机器人的花费,小新最多能收集到多少金币”第三层循环:因为dp[t]的最优解一定在经过了k步后到达某个i号工厂,故从1~p。(如果现在在第i号工厂,则上一个工厂是i-1#,上一条道路是i-1#)求出dp[t],最终的结果就是dp[m]。而这个位置有可能是。
2024-05-08 23:46:43 877
原创 2009NOIP普及组真题 1. 多项式输出
如果a小于0,则不管在哪个位置,都要输出负号;step3、再输出abs为1,且a为常数项的数。如果a大于0,则除了最高次幂,其他都输出+号。step2、再输出abs不等于1的数。step4、最后处理x的t次幂。本题中没有 t 小于1的情况。如果t等于1,则输出 x。step1、先输出符号。如果t大于1,则输出。
2024-05-07 22:23:19 376
原创 2009NOIP普及组真题 3. 细胞分裂
a. 检查m1的每一个质因数是否都是 Si 的因数,如果有一个不是,则Si不可能被除尽。,即质因数2的幂次为3,质因数5的幂次为1)。如果此时 Si 的质因数中,2有2个,5有1个,则3个周期后才能整除。如果此时 Si 的质因数中,2有3个,5有1个,则2个周期后可整除。5、所有的 Si 都读完后,找出分裂周期最小的数值,就是本题的答案。(换句话说,m1 的质因数都是 Si 的因数。的质因数中,2有6个,5有2个,则 1 秒后到达。d. 找出 Si 的所有质因数中分裂周期最多的那个。
2024-05-07 21:00:27 519
原创 2010NOIP普及组真题 4. 三国游戏
一本通:http://ybt.ssoier.cn:8088/problem_show.php?,所以直接输出最大的那个次极大值即可。注意:在寻找每行的次极大值时,要先把。出来,因为题目输入的只有一半。,因为次极大值是可以选到的。找规律(不能硬写模拟)。(不会主动进攻),所以。不需要输出每次的选择。
2024-05-06 23:09:53 601
原创 2010NOIP普及组真题 3. 导弹拦截
一本通:http://ybt.ssoier.cn:8088/problem_show.php?则 a[i]到两个防御系统的“距离的平方和”分别为。假设某导弹 a[i]的坐标为(ax, ay);一个一个漏出去,每放出去一个,更新一次。故,本题所求的其实是在导弹被全覆盖情况下。,如果需要更新拦截半径才能囊括,则更新。1# 拦截系统坐标为(x1, y1);2# 拦截系统坐标为(x2, y2);的可能性,并计算每种区间划分下的。的导弹,而2#的拦截半径为。2、则:1#的拦截半径为。5、枚举区间之前,我们。
2024-05-06 11:41:06 902
原创 2010NOIP普及组真题 2. 接水问题
一本通:http://ybt.ssoier.cn:8088/problem_show.php?4、如果某个水龙头的剩余时间 b[i] 减到了0,但是队伍中已经没有排队等待接水的人了(j>n),则设置。1、先给每个b[i]水龙头分配一个人a[i],b[i] 表示水龙头的剩余时间。,此时的接水时间 t 就是最终结果。现实生活中如果我们去打水,肯定看。3、如果某个水龙头的剩余时间。同时 j++ 指向下一个人。5、当关闭水龙头的数量。循环表示1秒,即接水。2、n个人就处理n次。
2024-05-05 22:35:18 1018
原创 2010NOIP普及组真题 1. 数字统计
一本通:http://ybt.ssoier.cn:8088/problem_show.php?本题与之一样,由于数据范围不大,直接。
2024-05-05 19:34:15 266
原创 2011NOIP普及组真题 4. 表达式的值
4、叶子节点的数值都存入 {1,1},因为叶子节点放0则为0,放1则为1,所以叶子节点值为0和1的总方案数都是1。故,若a[0]、b[0]表示各自节点数值为0的方案数;a[1]、b[1]表示各自节点数值为1的方案数。如果是 c=a+b,仅当 a=0, b=0时, c=0。a和b只要有一个为1,则 c=1。如果是 c=a*b,仅当 a=1, b=1时, c=1。a和b只要有一个为0,则 c=0。3、本题要求的是最终结果为 0 的方案数,鉴于如下原则。然后把第一个左括号弹出(右括号也不入栈,相当于。
2024-05-04 23:19:02 1055
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人