- 博客(40)
- 收藏
- 关注
原创 P1109 学生分组
该程序解决学生分组问题,要求将N组学生人数调整到[L,R]范围内。首先计算总人数平均值x,若x不在[L,R]内则直接输出-1。否则统计低于L的人数t1和高于R的人数t2,最终输出max(t1,t2)作为最小交换次数。核心思路是通过比较不足和超出边界的人数,取较大值作为调整基准。程序使用double类型处理平均值,确保精度,并采用简洁的整数转换方法(如*1.0)来处理除法运算。
2025-11-22 12:30:00
950
原创 P1563 [NOIP 2016 提高组] 玩具谜题
该代码模拟了一个玩具小人围圈游戏的指令执行过程。使用结构体存储每个小人的朝向和名字,通过取余运算实现环形移动。关键点在于:当小人朝向(0/1)与指令方向相同时逆时针移动,否则顺时针移动。采用(t±p)%n的取余方式处理环形移动,确保索引始终在有效范围内。最终输出执行完所有指令后指向的小人名字。代码巧妙利用取余运算的循环特性,简洁高效地解决了环形移动问题。
2025-11-22 12:30:00
1258
原创 P1097 [NOIP 2007 提高组] 统计数字
摘要:该程序实现了对输入自然数进行排序并统计各数字出现次数的功能。使用数组存储数字后,通过sort()函数进行排序,然后遍历数组统计连续相同数字的个数。文中详细介绍了sort()函数的使用方法,包括基本语法、排序范围控制、默认/降序排序、结构体排序技巧、稳定排序与部分排序的区别,以及常见错误和竞赛最佳实践。特别强调了比较器的严格弱序要求和不同场景下的性能优化选择,为算法竞赛中的排序需求提供了全面指导。
2025-11-21 23:21:23
1015
原创 P1008 [NOIP 1998 普及组] 三连击
这篇代码解析展示了一个寻找满足1:2:3比例的三位数的算法。程序通过遍历192到332之间的数字,使用桶记录三个比例数(1x,2x,3x)中1-9数字的出现情况。当所有数字1-9恰好出现一次时,输出这三个数。关键点包括:使用memset清零桶数组,通过数位分解记录数字出现情况,并验证是否满足1-9各出现一次的条件。文中还详细介绍了memset函数的正确用法和常见陷阱,特别强调了它只适用于POD类型数据,在竞赛编程中需谨慎使用。
2025-11-21 22:45:16
883
原创 P1089 [NOIP 2004 提高组] 津津的储蓄计划
数组在算法竞赛中具有广泛的应用,是解决问题的基础工具。它不仅用于数据存储,还在查找、排序、动态规划、模拟数据结构等方面发挥着重要作用。熟练掌握数组的使用和相关算法,对于提高算法竞赛的解题能力至关重要。t=P9T8题目传送门https://www.luogu.com.cn/problem/P1089。
2025-11-14 00:17:03
767
原创 P7071 [CSP-J2020] 优秀的拆分
问题pow函数的输出可能会以科学计数法(带e)的形式显示。解决方案:使用std::fixed和控制浮点数的输出格式。示例作用std::fixed:设置为固定小数点表示法。:设置小数点后保留的位数为n。
2025-10-29 23:34:48
651
原创 P1851 好朋友
定义:如果一个整数 a 能够被另一个整数 b 整除,即 amodb=0,那么 b 是 a 的约数(因数)。枚举法:适用于较小的数,时间复杂度为 O(筛法:适用于需要多次查询多个数的约数的情况,时间复杂度为 O(nloglogn)。质因数分解:适用于需要处理较大数的约数问题,时间复杂度为 O()。欧几里得算法:用于计算两个数的最大公约数,时间复杂度为 O(logmin(a,b))。约数个数和约数和:通过质因数分解计算约数个数和约数和,时间复杂度为 O()。
2025-10-28 23:47:52
900
原创 B2122 单词翻转
是 C++ 标准库中的一个函数,用于反转容器中的元素。它定义在头文件中。char数组的getline()输入:需要指定数组的最大长度,以避免缓冲区溢出。的getline()输入:自动管理内存,不需要指定最大长度。函数:用于反转容器中的元素,支持双向迭代器的容器。
2025-10-24 23:05:53
443
原创 P6382 『MdOI R2』Car
substr()是 C++ 标准库中的一个成员函数,属于类。它用于从字符串中提取一个子字符串。substr函数:用于从字符串中提取子字符串,非常方便和高效。语法参数pos:开始提取的位置,默认为 0。len:提取的长度,默认为。返回值:返回一个对象,包含从指定位置开始的指定长度的子字符串。异常:如果pos超出了字符串的范围,会抛出异常。
2025-10-24 00:02:16
637
原创 P8813 [CSP-J 2022] 乘方
pow()函数用于计算一个数的幂。它定义在<cmath>头文件中。sqrt()函数用于计算一个数的平方根。它定义在<cmath>头文件中。pow函数:用于计算一个数的幂,接受两个double类型的参数,返回一个double类型的结果。sqrt函数:用于计算一个数的平方根,接受一个double类型的参数,返回一个double类型的结果。
2025-10-23 22:37:36
964
原创 P9459 「EZEC-14」浴眼盯真
定义是C++标准库中的一个类,用于表示和操作字符串。头文件命名空间位于std命名空间中。是C++标准库中一个非常强大和灵活的字符串类,提供了丰富的成员函数和操作符,用于字符串的创建、修改、查询和操作。使用可以避免C风格字符串常见的安全问题,提高代码的可读性和安全性。
2025-09-17 23:59:28
273
原创 P1425 小鱼的游泳时间
明确单位关系:清楚地理解单位之间的换算关系,并列出换算公式。统一单位:选择一个基准单位,将所有数据都转换为这个基准单位。注意精度问题:避免浮点数误差,合理舍入计算结果。检查边界条件:考虑极端情况,确保输入数据在合理范围内。编写清晰的代码:使用有意义的变量名,添加注释,便于理解和维护。验证结果:手动计算几个例子,编写多个测试用例,确保代码的正确性。
2025-09-16 23:49:36
853
原创 P6352 [COCI 2007/2008 #3] CETIRI
定义:最大公约数(Greatest Common Divisor,GCD)是指两个或多个整数共有约数中最大的一个。应用:最大公约数在数学和计算机科学中有着广泛的应用,例如简化分数、解决同余方程等。最大公约数(GCD):两个或多个整数共有约数中最大的一个。欧几里得算法:一种高效的计算最大公约数的方法,基于递归调用和模运算。代码实现基本情况:当 b 为 0 时,返回 a。递归调用:当 b 不为 0 时,递归调用。通过上述步骤,可以清晰地理解最大公约数的计算过程,并使用欧几里得算法高效地实现这一计算。
2025-09-15 23:58:40
1142
原创 P1085 [NOIP 2004 普及组] 不高兴的津津
定义:枚举算法是一种通过遍历所有可能的解来找到问题答案的算法。它是一种简单的暴力搜索方法,适用于解空间较小的问题。特点简单直观:逻辑简单,易于理解和实现。适用范围广:适用于各种类型的问题,尤其是解空间较小的问题。效率较低:对于解空间较大的问题,效率较低,可能导致超时。枚举算法是一种通过遍历所有可能的解来找到问题答案的算法,适用于解空间较小、问题规模较小或无明显规律的问题。明确解空间:明确问题的解空间,即所有可能的解的集合。避免重复:在枚举过程中,避免重复枚举相同的解。优化剪枝。
2025-09-14 20:18:55
1189
原创 P1150 Peter 的烟
定义:模拟算法是一种通过计算机程序模拟现实世界或抽象问题的过程,以求解问题的算法。它通常用于解决那些难以用数学公式直接求解的问题。特点:模拟算法通常需要详细地描述问题的每一个步骤,通过逐步模拟问题的运行过程来得到最终结果。模拟算法是一种通过计算机程序模拟问题运行过程的算法,适用于解决难以用数学公式直接求解的问题。理解问题:明确目标、确定边界条件、分解问题。设计模拟过程:确定模拟步骤、选择合适的数据结构、管理状态。编码实现:编写清晰的代码、模块化设计、进行边界检查。测试与验证。
2025-09-14 19:40:42
776
原创 P10442 「MYOI-R3」字符串
定义:O2 是编译器优化级别的一种,通常用于在编译代码时平衡代码的执行速度和编译时间。它是一种中等优化级别,旨在提高程序的运行效率,同时保持较短的编译时间。目标:在不显著增加编译时间的情况下,尽可能提高程序的运行速度和效率。O2 优化是一种平衡性能和编译时间的优化方式,适合大多数开发和生产场景。它通过一系列的代码和数据优化,提高程序的运行效率,同时避免了过长的编译时间和复杂的优化问题。在实际开发中,可以根据项目需求和开发阶段选择合适的优化级别。
2025-09-14 19:23:26
1251
原创 P1046 [NOIP 2005 普及组] 陶陶摘苹果
模拟是一种通过逐步实现问题描述中的操作和逻辑的方法。它通常直接、易理解,适合解决一些简单或逻辑复杂但不需要高级算法的问题。在算法竞赛中,模拟方法可以快速找到解决方案,尤其是在问题规模较小时。
2025-09-12 00:23:58
1063
原创 P6421 [COCI 2008/2009 #2] RESETO
埃氏筛法是一种简单且高效的算法,用于找出一定范围内的所有素数。通过逐步筛选掉合数,最终留下素数。
2025-09-11 18:17:54
983
原创 P1035 [NOIP 2002 普及组] 级数求和
在C++中,当double和int一起进行算术运算时,int会被隐式提升为double,以确保计算的准确性。这种类型提升是C++语言的特性之一,旨在避免精度丢失。
2025-09-11 00:40:47
951
原创 P6263 [COCI 2014/2015 #3] STROJOPIS
sizeof 是C++中的一个运算符,用于获取变量或类型所占用的字节数。sizeof 的结果类型是 size_t,通常用于动态内存分配和数组操作中。用同一根手指按所需的键是同一颜色的。黄色键需要用小指按下,蓝色键需要用无名指,绿色键需要用中指,红色键需要用食指。自然,左手按键盘的左侧(从。:a数组从1开始取,到8结束,这是符合人类思考的数数方式,不容易出差错。每根手指头对应不同的区域,不算大拇指,共八个手指。开始向左的键),右手按右侧(从。记录字符串里面元素的个数,文章的。除去上面的情况,最后剩余的情况,
2025-09-10 19:40:30
486
原创 P2705 小球
这一题如果要是陷入了分支判断的思考中,就会写非常多的冗长的代码,需要判断不同的分的比较。所以分析题目的时候需要抓住题目的重点突破口,此题通过得分的最大情况来直接进行遍历,找到数学公式后,开始枚举,会让题目迎刃而解。现在红盒子里面有一个错位球,即2个红盒子👉放1个红球跟1个蓝球,拿出一个红球。i代表的是错位球的情况,一开始的时候从0开始统计,即一开始无错位球。有2个红球放在2个红盒子,3个蓝球放在3个蓝盒子。有2个红球放在2个红盒子,3个蓝球放在3个蓝盒子。3个蓝盒子👉放2个蓝色的球跟一个空缺的蓝盒子。
2025-09-10 01:50:13
588
原创 P7772 [COCI 2009/2010 #2] FAKTOR
向上取整,要求数字最小,那么最好就是题目中的I−1 点几,所以直接尝试A×(I−1),但是这会得到的是I−1,为了向上取整得到 I ,所以还要再加 1。N/A后再加上t,t就是看N/A的实际值是整数(t=0)还是小数(t=1)给定 A,I,求一个最小的 N,使得⌈N/A⌉≥I。从1开始枚举,中间没设置终止条件,找到后break就行了。每次循环,将t设置为0,代表N/A刚好就是I。熟悉数学上的取整后,有一种更简单的数学表达。数据不大,暴力枚举,注意向上取整就行了。
2025-09-09 23:48:42
474
原创 P5832 [USACO19DEC] Where Am I? B
是一个非常有用的函数,可以方便地从字符串中提取子字符串。通过指定起始位置和长度,可以灵活地处理字符串的切片操作。
2025-09-09 15:16:35
697
原创 P6386 [COCI 2007/2008 #4] VAUVAU
取余操作的本质是一种规律性的循环,因为余数的范围是固定的。这种周期性在许多实际应用中非常有用,例如时钟问题、数组索引、哈希表和周期性任务。
2025-09-08 18:34:38
1258
原创 P2669 [NOIP 2015 普及组] 金币
注意观察这个三角形,假设天数是9,那么前三行可以直接算,即1*1+2*2+3*3(六天的钱,三角形前3行)出现两次的原因,因为第一次是跳出内层for循环(三角形的列),第二次跳出外层for循环(三角形的行),对应三角形的每一行,因为不知道具体在哪一行,所以中间的结束条件为空,即死循环(这也就是。用来存储三角形的层数之和(除了最后一层不满足外),即n层三角形n-1层的金币总数。简答分析后,发现得到的金币数就是个数字三角形,顺序(由左到右,由上到下)(前n-1层的三角形元素和,即n层三角形n-1层的金币总数)
2025-09-08 16:46:46
373
原创 P7257 [COCI 2009/2010 #3] FILIP
三目运算符是一种简洁的条件表达式,适用于简单的条件判断和赋值。它被称为“三目”运算符,是因为它涉及三个操作数:条件表达式、真值表达式和假值表达式。
2025-09-06 13:42:31
1067
原创 P5660 [CSP-J2019] 数字游戏
是C++中的一个运算符,用于获取变量或类型所占用的字节数。string类型的字符串,其实就是一个数组,可以用下标遍历。这是C语言标准库函数,用于获取C风格字符串(以空字符结束的。类型的值,表示字符串的长度,不包括结尾的空字符。不知道字符串s的长度,可以用size()函数。类的成员函数,用于获取 string。统计字符串中1的个数,依次遍历并计数。,通常用于动态内存分配和数组操作中。它们的功能完全相同,返回值类型是。如果你处理的是C风格字符串(如果你使用的是string。字符串中究竟有多少个 1。
2025-09-06 01:29:48
205
原创 P1420 最长连号
max目的是存放最大值,一开始初始化就要按照小的初始化,这样就能从第一个数据开始记录。初始化 max=0或者-1,有连续的时候就会记录,从一记录到三。(从不一样的这个开始判断连续,开始的第一个自然数计数为1)初始化 max=9,没有意义,最多连续是 6 7 8 三个。每一次for循环都会进行判断,如果连续就记录,不然就。数据:6 6 7 8 2 3 3 3。因为数组从下标1开始存储,对于。开始,可以直接访问前一个数据。同理,min要存放个极大值。从小到大的连续自然数。
2025-09-06 00:07:04
353
原创 P1887 乘积最大3
当数字相近时,乘积最大,因为根据AM-GM不等式,当所有数都相等时,几何平均数达到最大值,从而乘积也达到最大值。a2+...+a2+
2025-09-05 13:04:12
970
原创 P7226 [COCI 2015/2016 #3] POT
原来的 X 为 21²+125³,但现在变成了 212+1253。虽然题目前面的公式花里胡哨一大堆,但是这个例子就解释了题目意思。来进行循环输入,比for循环的优势在于少些点代码,更简便。当底数为负数且指数为小数时,结果可能为。大数运算可能导致溢出,需注意数值范围。数位分离,得到原本的数字,然后累加。类型的结果会被截断为整数类型。类型的值会被截断为整数。返回3.0(平方根)。是取出数字尾巴的数,会进行开方运算,例如。
2025-09-05 01:21:22
147
原创 B3843 密码合规
识别到了非规定输入,跳到else分支,直接找到结束符并初始化变量,因为数组故意开大了一点,所以不必担心“begin=i+1”会越界。“大写字母,小写字母和数字必须至少有其中两种”,说明至少有三个cnt变量计数有两个0,即三个数和<=1。设置一个变量当作指针来始终指向当前段的开始,识别到了不符合的字符直接跳过这段字符,进行下一段的判断。题目列了三个要求,但是共有四个条件,不要遗漏“以及至少有四个特殊字符中的一个”大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。
2025-09-04 18:44:41
463
原创 B4067 打印数字
ans数组是string类型的,直接存储5行,每次存储数组ans会换行,正好是需要存储的数字形式。:这里的数字表现形式存在数组里是横着存储的,数字0的范围是ch[0][0]~ch[0][4]。:是string类型的数组,所以每一次可以存储长字符串。数组的下标从0开始,不要出错。常用的手段,字符通过ascll码运算得到数字,得到的数字作为数组下标来访问数组。小杨想请你将给定的数字 n 转换为对应的表示形式。因为有一一对应的关系,直接放弃思考,打表输出。例如:ch[0][3]是".***."
2025-09-03 17:22:37
386
原创 B3939 绝对素数
所有大于3的素数均可以表示为6k±1的形式(其中k为正整数)。输入 1 行,包含两个正整数 A 和 B。保证 10<A<B<100。简单的数位分离,%10相当于拿出数的尾巴,/10相当于砍掉数的尾巴。倒过来时候,通过乘10来进行扩大数的位数,然后加上尾巴数。公式化表达为: 检查范围缩减至:k ≤ ⌊√n/6⌋。每次k生成两个候选除数:6k−1和6k+1。所以可以直接考虑两位数情况。6k±1优化法判断素数。
2025-09-02 01:59:10
507
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅