- 博客(70)
- 收藏
- 关注
原创 【普及−】洛谷P1706 全排列问题
按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。由 1∼n 组成的所有不重复的数字序列,每行一个序列。我们总结一下在上一部分中的思路在程序中如何实现。第一格填2的排列情况共有两种 213,231.第一格填1的排列情况共有两种123,132.构造一棵搜索树(或说是状态树)来进行搜索。在循环中先判断当前填的数是否用过,请你自己画画第一格填3的搜索树。现在,我们从第一格开始搜索。接下来就是写深搜的函数了。用来存放搜索树中的结果。
2025-05-28 19:07:25
705
原创 洛谷P1007—— 独木桥
你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。所有士兵的速度都为 1,但一个士兵某一时刻来到了坐标为 0 或 L+1 的位置,他就离开了独木桥。另外,总部也在安排阻拦敌人的进攻,因此你还需要知道你的部队最多需要多少时间才能全部撤离独木桥。对于 100% 的数据,满足初始时,没有两个士兵同在一个坐标,1≤L≤5×103,0≤N≤5×103,且数据保证 N≤L。第i个士兵有两种撤离的方法,他们需要的时间分别为l+1-a[i],a[i]。桥上的坐标为 1,2,⋯,L。
2025-05-23 18:17:13
366
原创 【普及+/提高】洛谷P2613 ——【模板】有理数取余
本题需使用逆元。逆元即对于同余方程 ax≡1(modp),则 x 为 amodp 的逆元,记作 a−1。若其满足 a∤p,则 a−1≡ap−2(modp)。本题中 a 和 b 为较大的整数,可以用快读来读入,并对 19260817 取模。
2025-05-23 18:09:30
1093
原创 洛谷B3840 [GESP202306 二级] 找素数
容易发现,x=a×b,其中 a≤x,b≥x,那么如果 xmoda=0,那么我们无需再去查询 xmodb 是否为 0。根据这个思路,我们无需枚举 2∼x−1,只需枚举 2∼x 即可。小明刚刚学习了素数的概念:如果一个大于 1 的正整数,除了 1 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数 A 和 B 之间(包括 A 和 B)有多少个素数。但是对于可能 x<2 的情况,那么 x 就一定不是质数了。枚举所有可能为 x 因数的数 ∀2≤a≤x−1,如果 xmoda=0,
2025-05-21 22:45:00
192
原创 洛谷P1093—— [NOIP 2007 普及组] 奖学金
先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。第 j 行的 3 个数字依次表示学号为 j−1 的学生的语文、数学、英语的成绩。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 7 的学生语文成绩更高一些。任务:先根据输入的 3 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。保证所给的数据都是正确的,不必检验。
2025-05-19 20:01:47
275
原创 洛谷B3876—— [信息与未来 2015] 中间值
若 n 为奇数,则输出其中间值;若 n 为偶数,则输出两个中间值的和。给出一个正整数 n,生成长度为 n 的数列 a,其中 ai=i(1≤i≤n)。2.如果n是奇数,输出(n+1)/2。1.如果n是偶数,输出n+1;开long long……
2025-05-19 19:35:45
207
原创 洛谷P1075—— [NOIP 2012 普及组] 质因数分解
大家应该知道,约数是成对出现的(平方数除外),也就是说,一个数的第一小约数乘第一大约数相乘等于这个数,第二小约数乘第二大约数相乘也依然等于这个数!因此,只要找出n的最小约数(1除外),再用n除以这个数,就能得到结果了!已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。这题真的不难,只不过数据点有点坑,因此要多多留意(小心!有人说,其实没必要枚举到2,枚举到n的平方根就行了。输出一个正整数 p,即较大的那个质数。也并不尽如人意... ...其实还有一种更简便的方法!终于通过了... ...
2025-05-18 15:03:06
324
原创 【普及−】洛谷——P1177 【模板】排序
(自定义比较方式时,除了下文所述的比较函数仍然有其他方法,感兴趣的读者可以自行了解,此处不再赘述。剩下的数仍然需要排序(一个序列为空,另一个包含了除与选定的数相等的数以外的所有数),此时时间复杂度的递推式满足 T(n)=2T(2n)+O(n)=O(nlogn),一般情况下的复杂度为 O(nlogn),最坏时间复杂度为 O(n2)。每一次将原序列分为 3 个序列的过程的时间复杂度是 O(n)。此时的复杂度递推式为 T(n)=T(n−1)+n=O(n2),快速排序最好情况下的时间复杂度为 O(nlogn),
2025-05-14 12:52:50
546
原创 【普及/提高− 】洛谷P1928—— 外星密码
解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 X 会压缩为 [DX] 的形式(D 是一个整数且 1≤D≤99),比如说字符串 CBCBCBCB 就压缩为 [4CB] 或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。输入的这个字符串是被多重「压缩」的,所以一重一重地「解压缩」可能会非常非常麻烦(不过应该是可行的),导致代码极其难以理解。,在读入这个字符串之后,找出被压缩的内容,再对被压缩的那个字符串实行「解压缩」操作。输入一行,一个字符串,表示外星人发送的密码。
2025-05-12 20:10:51
708
原创 洛谷P1048—— [NOIP 2005 普及组] 采药
但是明显不是最优的,用脑子想了一下,发现 dp[2][j](j>6)=20,这个 20 怎么来的呢,当然是从前一个状态来的(注意这里就可以分为两种情况了):一种是选择第二个物品放入,另一种还是选择前面的物品;接着 i=2 放两个物品,求的就是 dp[2][j] 了,当 j<5 的时候,是不是同样的 dp[2][j](j<5) 等于0;到这里就可以了,依次类推,动态转移方程为:dp[i][j]=max(dp[i−1][j−w[i]])+v[i],dp[i−1][j])转化时间为背包容量和草药占的量。
2025-05-11 14:49:59
1071
原创 AcWing2——01背包问题
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i件物品的体积是 v[i],价值是 wi[i]。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。
2025-05-11 14:43:05
770
原创 【普及/提高−】洛谷P8611—— [蓝桥杯 2014 省 AB] 蚂蚁感冒
若设 tori 表示第一只感冒的蚂蚁左边向右走的蚂蚁数量,tole 表示第一只感冒的蚂蚁右边向左走的蚂蚁数量,则依据上图易知,不管第一只感冒的蚂蚁向右走还是向左走,都可得 ans=tori+tole+1。由于蚂蚁速度相同,如果第一只感冒的蚂蚁向右,那么它右面向左走的一定会传染,右面向右走的一定不会传染,左面向左走的一定不会传染,左面向右走的会被右面向左走的被感染的感染。设被感染的蚂蚁数为 n ,第 1 只蚂蚁左侧朝右的蚂蚁数为 x ,第 1 只蚂蚁右侧朝左的蚂蚁数为 y。这些蚂蚁中,有 1 只蚂蚁感冒了。
2025-05-10 12:50:34
718
1
原创 洛谷B4197 [常州市程序设计小能手 2020] 欢迎
欢迎参加 2020 年常州市“程序设计小能手”比赛!小 X 想为你献上一张贺卡,不过……,其中 A 是选手的编号。第一行和第三行相同,是和第二行字符数量相同的。输入数据只有一行,包含一个正整数 A,表示选手的编号。你可以通过复制样例输出来避免一些问题。你可以通过样例来理解。对于所有数据,1≤A≤109。本题共有 5 个测试点。
2025-05-04 10:04:04
254
原创 (一道有意思的题)洛谷P1615—— 西游记公司
你可以这样做:你已经知道孙悟空什么时候要来偷猪八戒的东西,而猪八戒又要在什么时间去抢沙和尚的东西,又知道猪八戒每秒钟可以偷沙和尚 n 台笔记本,帮猪八戒算一算,自己在有限的时间内能偷到沙和尚多少台笔记本,使得他有足够的时间来防御大师兄。其中,孙悟空偷猪八戒的平底锅之前,猪八戒可以一直抢沙和尚的笔记本。第一行:一个时间,为 时:分:秒 形式,表示猪八戒打算去偷沙和尚笔记本的时间;第二行:一个时间,为 时:分:秒 形式,表示孙悟空打算去偷猪八戒平底锅的时间。看各位大佬的题解十分简单,没有一个长的,所以————
2025-04-28 16:06:42
238
原创 【普及−】洛谷P1059—— [NOIP 2006 普及组] 明明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
2025-04-27 16:02:26
428
原创 【普及+/提高】洛谷P1119 ——灾后重建
接下来 M 行,每行 3 个非负整数 i,j,w,w 不超过 10000,表示了有一条连接村庄 i 与村庄 j 的道路,长度为 w,保证 i=j,且对于任意一对村庄只会存在一条道路。很多人都是直接把这个算法背了下来,然后要求最短路时直接默写,没有考虑到这个算法的本质意义,而这个题目,正好考了这个算法的本质,如果只会背的话,遇见这题直接就GG。接下来 Q 行,每行 3 个非负整数 x,y,t,询问在第 t 天,从村庄 x 到村庄 y 的最短路径长度为多少,数据保证了 t 是不下降的。那么,如何进行中转呢?
2025-04-26 10:25:53
1410
1
原创 洛谷——B3647 【模板】Floyd
● Floyd 算法(又称 Floyd-Warshall 算法)是一种用于求解所有顶点对之间最短路径的动态规划算法。它适用于带权有向图或无向图,可以处理正权边和负权边(但不能有负权环)。对于 100% 的数据,n≤100,m≤4500,任意一条边的权值 w 是正整数且 1⩽w⩽1000。接下来 m 行,每行三个整数 u,v,w,代表 u,v 之间存在一条边权为 w 的边。第 i 行的第 j 个整数代表从 i 到 j 的最短路径。第一行为两个整数 n,m,分别代表点的个数和边的条数。
2025-04-26 09:47:53
339
原创 【普及/提高−】U81206 【模板】链式前向星
若flag=1则m行,flag=0则m*2行,每行三个数,即该点的编号、所指向点的编号,边的长度,先按第一个数升序排列,再以链式前向星中的顺序输出即可。(其实就是i从1到n,再按顺序查找边输出即可) 特殊的,若该点无出边,单独一个空行。链式前向星模板题,读入n个点,m条边,以及flag,若flag==1则图有向,否则无向。第一行三个数n,m,flag,题意如上所示 第2~1+m行,每行三个数,x,y,z,代表从x到y有一条长为z的边。ne[idx]:存储序号为 idx 的边指向的边的序号(模拟链表指针)
2025-04-23 18:20:28
596
原创 【普及-】洛谷B3862—— 图的遍历(简单版)
给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。接下来 M 行,每行 2 个整数 Ui,Vi,表示边 (Ui,Vi)。一行 N 个整数 A(1),A(2),…第 1 行 2 个整数 N,M,表示点数和边数。
2025-04-21 20:42:11
753
原创 洛谷P1090 ——[NOIP 2004 提高组] 合并果子
接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12 ,耗费体力为 12。假定每个果子重量都为 1 ,并且已知果子的种类 数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。第二行包含 n 个整数,用空格分隔,第 i 个整数 ai(1≤ai≤20000) 是第 i 种果子的数目。
2025-04-17 21:38:02
541
原创 洛谷B3839—— [GESP202306 一级] 累计相加
1+(1+2)+(1+2+3)+(1+2+3+4)+⋯+(1+2+3+4+5+⋯+n) 的累计相加。输入一个正整数 n。约定 1<n≤100。输出累计相加的结果。
2025-04-13 16:01:02
212
原创 洛谷B3835 ——[GESP202303 一级] 每月天数
小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。输入一行,包含两个整数 A,B,分别表示一个日期的年、月。约定 2000≤A≤3000,1≤B≤12。输出一行,包含一个整数,表示输入月份有多少天。
2025-04-13 15:54:58
333
原创 USACO Training Section 1.1——Your Ride Is Here
include<bits/stdc++.h>//万能头int main()string a,b;//STL中的字符串//ans代表第一个字符串所对应的数字//num代表第二个字符串所对应的数字//使用getline对a、b进行输入,getline在读取的时候读到回车会结束。//下面用两个循环进行统计字符串所对应的数字。i<a.size();i++)//"a.size()"是对应字符串a的长度//大写字母-64,自动转化为整型,并且大写字母-64就是其对应的字母的编号。
2025-04-05 10:24:27
609
原创 洛谷P1765 ——手机
要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。一行句子,只包含英文小写字母和空格,且不超过 200 个字符。NOI 导刊 2010 普及(10)一行一个整数,表示按键盘的总次数。不要用scanf("%s");用一个数组记录按键的次数;不用考虑'#','*';这样的话读到空格就停;
2025-04-05 09:05:33
445
空空如也
洛谷B4156 [厦门小学生 C++ 2023] 太空旅行
2025-04-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人