分类: c++

57 篇文章

口算练习题
P1957 口算练习题 时间限制: 1.00s    内存限制: 512.00MB  复制 Markdown  中文 退出 IDE 模式 题目描述 王老师正在教简单算术运算。细心的王老师收集了 i 道学生经常做错的口算题,并且想整理编写成一份练习。编排这些题目是一件繁琐的事情,为…
插火把
P1789 【Mc生存】插火把 时间限制: 1.00s    内存限制: 125.00MB 题目描述 话说有一天,linyorson 在“我的世界”中开了一个 n×n 的方阵。现在他有 m 个火把和 k 个萤石,分别放在 (x1​,y1​)∼(xm​,ym​)…
快速幂(Exponentiation by squaring)
快速幂是一种高效计算幂运算的算法,核心思想是将指数进行二进制分解,从而将计算复杂度从 O(n) 降低到 O(log n)。 算法原理: 计算 a^b,将 b 写成二进制形式,例如 b = 13 (二进制 1101),则 a^13 = a^(8) * a^(4) * a^(1)。通过反复平方 a 并检查二进制位,可快速得到结果。 迭代实现(常用): …
好久没更新算法动态(这几天写的全是简单题)
P1980 [NOIP 2013 普及组] 计数问题 时间限制: 1.00s    内存限制: 125.00MB 题目背景 NOIP2013 普及组 T1 题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9)共出现了多少次?例如,在 1 到…
幂次方递归(回归C++)
P1010 [NOIP 1998 普及组] 幂次方 时间限制: 1.00s    内存限制: 125.00MB 题目描述 任何一个正整数都可以用 2 的幂次方表示。例如 137=27+23+20。 同时约定次方用括号来表示,即 ab 可表示为 a(b)。 由此可知,13…
Python nb(陈年旧题)
P1009 [NOIP 1998 普及组] 阶乘之和 时间限制: 1.00s    内存限制: 125.00MB 题目描述 用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)。 其中 ! 表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=1…
C++ 全排列输出格式化:场宽控制完全指南
引言 在算法竞赛和实际开发中,全排列生成是常见需求。当需要输出大量排列时,整齐的排版能显著提升可读性。本文基于文档中的 STL 全排列代码,详细讲解如何实现“每个数字保留 5 个场宽”的规范输出,并提供多种实现方案。 核心概念:场宽(Field Width) 场宽是指输出数据在屏幕上所占用的最小字符宽度。通过设置场宽,可以确保数据对齐,使输出结果整…
P5730 【深基5.例10】显示屏
题目描述 液晶屏上,每个阿拉伯数字都是可以显示成 3×5 的点阵的(其中 X 表示亮点,. 表示暗点)。现在给出数字位数(不超过 100)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。 输入格式 第一行输入一个正整数 n,…
幻方(前几天忘发了)
P2615 [NOIP 2015 提高组] 神奇的幻方 时间限制: 1.00s    内存限制: 125.00MB 题目背景 NOIp2015 提高组 Day1T1 题目描述 幻方是一种很神奇的 N×N 矩阵:它由数字 1,2,3,⋯⋯,N×N 构成,且每行、每列及两条对角线上的数字之和都…
埃拉托斯特尼筛法 – 高效找出所有质数
核心思想:用"排除法"找质数 质数:只能被1和自己整除的数(如2,3,5,7,11...) 合数:能被其他数整除的数(如4,6,8,9,10...) 关键发现:所有合数都是某个质数的倍数! 比如:4=2×2, 6=2×3, 8=2×4, 9=3×3, 10=2×5... 所以,如果我们找到所有质数,然后把它们的倍数都去掉,剩下的就是质数。 具体操作…
二分查找中点计算:深入理解除法和右移运算符的选择
一、引言:为什么中点计算很重要? 在算法学习中,二分查找是一个基础但重要的算法。计算中点位置是二分查找的核心步骤之一。看似简单的 (left + right) / 2其实隐藏着不少细节,而 left + (right - left) / 2的写法更值得推荐。本文将详细解释这两种写法,并分析右移运算符 >>的作用和注意事项。 二、两种基本…
异或与0的关系:二进制世界的身份保持者
一、为什么 a ^ 0 = a? 这是异或运算最直观的性质。让我们从二进制位的角度来理解: 逐位分析 考虑任意一位 a(0 或 1)与 0 的异或: a0a ^ 0结果等于 a 吗?000✓ 相同101✓ 相同 解释: 当 a = 0 时:0 ^ 0 = 0 → 结果还是 0 当 a = 1 时:1 ^ 0 = 1 → 结果还是 1 关键观察:0 …
异或运算:二进制世界的神奇魔术
一、什么是异或运算? 异或(XOR,Exclusive OR)是计算机科学中最基础也最有趣的位运算之一。它的名字"异或"很贴切地描述了其含义:"异"表示不同,"或"表示逻辑或,合起来就是"当且仅当不同时为真"。 基本定义 对于两个二进制位: 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 用简单的话说…
妮妮学姐的取数问题:贪心策略与双端权衡
题目重述与分析 妮妮学姐有一个长度为 n的数组 a,需要执行 k次操作,每次操作有两种选择: 操作A:取走当前数组中的最大元素(消耗1次操作,取走1个元素) 操作B:取走当前数组中的最小和次小元素(消耗1次操作,取走2个元素) 目标是在 k次操作后,取走的元素总和最小。 关键约束:2k<n,这意味着无论如何选择操作,都不会取完所有元素。 核心…
依旧是贪心
P1803 凌乱的yyy / 线段覆盖 时间限制: 3.00s    内存限制: 512.00MB 题目背景 Python 用户可以尝试使用 pypy3 提交试题。 快 noip 了,yyy 很紧张! 题目描述 现在各大 oj 上有 n 个比赛,每个比赛的开始、结束的时间点是知道的。 yyy 认为,参加越多的…
部分背包(比较简单,需要注意是否越界访问等问题)
P2240 【深基12.例1】部分背包问题 时间限制: 1.00s    内存限制: 125.00MB 题目描述 阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N≤100) 堆金币,第 i 堆金币的总重量和总价值分别是 mi​,vi​(1≤mi​,vi​≤100)。阿里巴巴有…
孩子们,我回来了(写了个简单题)
P1223 排队接水 时间限制: 1.00s    内存限制: 125.00MB 题目描述 有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为 Ti​,请编程找出这 n 个人排队的一种顺序,使得 n 个人的平均等待时间最小。 一个人的等待时间不包括他的…
printf函数详细教程(给C++学习者的特别指南)
一、printf是什么? printf是C语言的输出函数,在C++中也可以使用。它与cout相比: cout:面向对象的流输出 printf:函数式格式化输出 简单对比: // cout方式 cout << "Hello, " << name << "! Age: " << age << …
C++ map 和 unordered_map 详解
一、基本概念对比 1. 共同点 都是关联容器,存储键值对(key-value pairs) 提供快速的查找、插入、删除操作 键(key)唯一,不能重复 2. 核心区别 特性mapunordered_map底层实现​红黑树(平衡二叉搜索树)哈希表排序​按键的升序自动排序无序查找时间复杂度​O(log n)平均O(1),最坏O(n)内存占用​较低较高(…
浮点数输出精度控制与舍入规则详解
一、为什么要控制精度和舍入? 1.1 问题演示 #include <iostream> using namespace std; int main() { double a = 1.0 / 3; // 0.3333333333333333... double b = 2.0 / 3; // 0.6666666666666666... c…
范围for循环(Range-based for loop)总结
一、核心语法格式 for (元素类型 变量名 : 容器) { // 循环体 } 记忆口诀:for (类型 名字 : 容器) 二、三种使用方式对比 写法用途能否修改原数据效率for (char c : s)只读遍历,创建副本❌ 不能较低(有拷贝开销)for (char& c : s)可修改遍历,引用原数据✅ 能高(无拷贝)for (const…
C++ stack(栈)容器详解
一、什么是栈? 基本概念 栈(stack)​ 是一种 先进后出(First In Last Out, FILO)​ 的数据结构,它只有一个出口。 生活比喻 想象一叠盘子: 放盘子(入栈):只能放在最上面 取盘子(出栈):只能从最上面取 特点:最后放上去的盘子最先被取走 二、栈的重要特性 关键限制:不能遍历! stack<int> s; …
vector 遍历方法总结(适合初学者)
一、核心概念回顾 遍历​ = 按顺序访问容器中的每个元素 二、一维 vector 的遍历方法 方法1:下标遍历(最简单直观) vector<int> v = {10, 20, 30, 40, 50}; // 1.1 传统for循环 for (int i = 0; i < v.size(); i++) { cout <<…
vector 的多种赋值方法详解
一、初始化时赋值(创建时就给值) 1. 直接初始化(最常用) vector<int> v1 = {1, 2, 3, 4, 5}; // C++11开始支持 vector<int> v2{6, 7, 8, 9, 10}; // 直接列表初始化 vector<int> v3({1, 2, 3, 4, 5}); // …
C++ STL容器竞赛核心攻略(蓝桥杯必学)
🎯 学习策略 重点突破:只学竞赛中真正高频的容器,避免“全面但无用” 核心原则:80%的题目用20%的容器功能解决 一、必学高频(核心中的核心) 1. vector(动态数组)—— STL最基础容器 核心定位:蓝桥杯100%必考,替代C语言静态数组,支持动态扩容 必须掌握的定义方式 #include <vector> using nam…
蓝桥杯必学 4 大 STL 容器详解(stack/queue/unordered_map/unordered_set)
通用前提 所有容器使用前需包含对应头文件,核心规则: 判空优先:访问容器元素(如栈顶、队头)前,必须用empty()判断是否为空,避免程序崩溃; 效率优先:优先用unordered_*(哈希实现,O (1) 效率),仅需排序时换map/set(红黑树,O (logn)); 核心接口:每个容器只需记 5 个左右核心用法,无需死记所有接口。 第一部分:…
C++ string 核心操作全汇总(yuanbao)
蓝桥杯算法竞赛高频必备,字符串处理题的基础工具,无需死记所有函数原型,重点掌握竞赛高频用法+避坑点+组合技巧。 🔧 通用基础规则 下标从0开始,最后一个字符下标为 s.size()-1 未找到指定内容时,返回常量 string::npos 单引号'c'表示单个字符(char),双引号"str"表示C风格字符串(const char*),二者不可混用…
C++ string 核心操作全汇总(3.1.2-3.1.9)
核心定位 蓝桥杯算法竞赛高频必备,字符串处理题的基础工具,无需死记所有函数原型,重点掌握竞赛高频用法 + 避坑点 + 组合技巧,以下按模块汇总,突出实用性、易读性,适配算法题场景。 通用基础 下标从0开始,最后一个字符下标为s.size()-1; 未找到指定内容时,返回常量string::npos(判断是否找到的核心依据); 单引号'c'表示单个字…
嵌套容器:从零开始的详细教程
一、为什么要用嵌套容器?(先理解需求) 生活中的例子 想象你需要记录这些东西: 一个班的成绩表:3个学生,每人有5门课成绩 一个学校的课程表:5个年级,每个年级有若干班级 一个城市的电话号码簿:按区号分类,每个区号下有多个号码 这些都需要表格形式或多级分类的存储,这时就需要嵌套容器。 二、从简单到复杂 第1步:先复习普通vector #includ…
P1104 生日
题目描述 cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。 输入格式 输入共有 n+1 行, 第 1 行为 OI 组总人数 n; 第 2 行至第 n+1 行分别是每人的姓名&n…