竞赛编程
Bitmask 位运算
6个高效算法问题(避免 O(n^2) 解法)
位操作
线性数据结构与算法
-
+
首页
线性数据结构与算法
涵盖了从基础的一维数组操作到高级的位运算和标准模板库(STL)算法。每个部分都包含一系列经典的编程题目,旨在帮助你深入理解数据结构的底层原理和应用。 --- ### 1D 数组操作(1D Array Manipulation) 主要涉及一维数组的基本操作,包括字符串解析、排序和线性扫描。 - **UVa 00230 - Borrowers**:涉及字符串解析,维护已排序书籍列表(排序键:作者名、书名)。 - **UVa 00394 - Mapmaker**:理解多维数组在计算机内存中是如何以一维数组形式存储的。 - **UVa 00414 - Machined Surfaces**:查找连续 'B' 的最长段。 - **UVa 00467 - Synching Signals**:线性扫描,使用一维布尔标志数组。 - **UVa 00482 - Permutation Arrays**:数组置换(注意数组大小未指定)。 - **UVa 00591 - Box of Bricks**:求平均值,并计算每个元素与平均值的绝对差之和。 - **UVa 00665 - False Coin**:使用一维布尔标志数组,通过排除法找出假币。 - **UVa 00755 - 487-3279**:直接寻址表,字母转换与数字排序,查找重复项。 --- ### 进阶 1D 数组与模拟(Continued) - **UVa 10038 - Jolly Jumpers**:使用一维布尔标志检查序列 `[1..n-1]` 的覆盖情况。 - **UVa 10050 - Hartals**:使用一维布尔标志数组模拟罢工日。 - **UVa 10260 - Soundex**:使用直接寻址表进行 Soundex 代码映射。 - **UVa 10978 - Let's Play Magic**:一维字符串数组操作。 - **UVa 11093 - Just Finish it up**:线性扫描,环形数组问题,具有一定挑战性。 - **UVa 11192 - Group Reverse**:字符数组分组反转。 - **UVa 11222 - Only I did it**:使用多个一维数组简化问题。 - **UVa 11340 - Newspaper**:使用直接寻址表(DAT)进行字符计价。 - **UVa 11496 - Musical Loop**:存储数据到一维数组,计算峰值。 - **UVa 11608 - No Problem**:使用三个数组分别记录创建、需求和可用资源。 - **UVa 11850 - Alaska**:判断在给定范围内(200英里)能否到达充电站。 - **UVa 12150 - Pole Position**:简单的数组模拟。 - **UVa 12356 - Army Buddies**:类似双向链表的删除操作,可用一维数组模拟。 --- ### 2D 数组操作(2D Array Manipulation) 重点在于二维数组的模拟、几何变换和矩阵操作。 - **UVa 00101 - The Blocks Problem**:栈模拟问题,需要访问栈内元素,适合用二维数组实现。 - **UVa 00434 - Matty's Blocks**:几何可视性问题,通过二维数组变换解决。 - **UVa 00466 - Mirror Mirror**:核心操作:旋转与反射。 - **UVa 00541 - Error Correction**:计算每行/每列的 '1' 的数量,必须全为偶数;若存在错误,检查是否在同一行和列。 - **UVa 01016 - Flip-flop the Squarelotron**:繁琐的矩阵变换。 - **UVa 10703 - Free spots**:使用 $ 500 \times 500 $ 的二维布尔数组标记空位。 - **UVa 10855 - Rotated squares**:字符串数组,顺时针旋转 90°。 - **UVa 10920 - Spiral Tap**:模拟螺旋填充过程。 - **UVa 11040 - Add bricks in the wall**:非平凡的二维数组操作。 - **UVa 11349 - Symmetric Matrix**:矩阵对称性检查(注意数据范围,使用 `long long`)。 - **UVa 11360 - Have Fun with Matrices**:矩阵变换模拟。 - **UVa 11581 - Grid Successors**:模拟网格迭代过程。 - **UVa 11835 - Formula 1**:按要求模拟。 - **UVa 12187 - Brothers**:过程模拟。 - **UVa 12291 - Polynomino Composer**:按要求操作,较繁琐。 - **UVa 12398 - NumPuzz I**:逆向模拟,注意模 10 运算。 --- ### C++ STL 算法(Java Collections) 利用 C++ 标准模板库(STL)或 Java 集合框架解决排序、搜索和排列问题。 - **UVa 00123 - Searching Quickly**:修改比较函数,使用 `sort`。 - **UVa 00146 - ID Codes**:使用 `next_permutation` 生成下一个排列。 - **UVa 00400 - Unix ls**:类 UNIX 系统 `ls` 命令的实现。 - **UVa 00450 - Little Black Book**:繁琐的排序问题。 - **UVa 00790 - Head Judge Headache**:多字段排序(类似 UVa 10258)。 - **UVa 00855 - Lunch in Grid City**:排序与中位数应用。 - **UVa 01209 - Wordfish**:使用 STL 的 `next` 和 `prev_permutation`。 - **UVa 10057 - A mid-summer night ...**:涉及中位数,使用 STL `sort`、`upper_bound`、`lower_bound` 及检查。 - **UVa 10107 - What is the Median?**:在动态增长的整数列表中查找中位数(可使用 `nth_element`)。 - **UVa 10194 - Football a.k.a. Soccer**:多字段排序。 - **UVa 10258 - Contest Scoreboard**:多字段排序。 - **UVa 10698 - Football Sort**:多字段排序。 - **UVa 10880 - Colin and Ryan**:使用 `sort`。 - **UVa 10905 - Children's Game**:修改比较函数,使用 `sort`。 - **UVa 11039 - Building Designing**:先排序,再统计不同符号的数量。 - **UVa 11321 - Sort Sort and Sort**:注意负数取模的处理。 - **UVa 11588 - Image Coding**:排序简化问题。 - **UVa 11777 - Automate the Grades**:排序简化问题。 - **UVa 11824 - A Minimum Land Price**:排序简化问题。 - **UVa 12541 - Birthdates**:排序,找出最年轻和最年长者。 --- ### 位运算(Bit Manipulation) 练习使用位集(bitset)或位掩码(bitmask)进行高效的数据处理。 - **UVa 00594 - One Little, Two Little ...**:使用 `bitset` 操作位字符串。 - **UVa 00700 - Date Bugs**:使用 `bitset` 解决日期问题。 - **UVa 01241 - Jellybelly Tournament**:简单问题。 - **UVa 10264 - The Most Potent Corner**:繁重的位掩码操作。 - **UVa 11173 - Grey Codes**:格雷码生成(D&C 模式或一维位操作)。 - **UVa 11760 - Brother Arif, ...**:分离行列检查,使用两个位集。 - **UVa 11926 - Multitasking**:使用 1M 大小的位集检查时隙是否空闲。 - **UVa 11933 - Splitting Numbers**:位操作练习。 - **IOI 2011 - Pigeons**:位操作可简化问题,但最终解法需要更多技巧。 --- ### C++ STL 列表(Java LinkedList) - **UVa 11988 - Broken Keyboard ...**:罕见的链表问题,模拟文本编辑。 --- ### C++ STL 栈(Java Stack) 利用栈的后进先出(LIFO)特性解决模拟和算法问题。 - **UVa 00127 - "Accordian" Patience**:洗牌栈模拟。 - **UVa 00514 - Rails**:使用栈模拟列车调度。 - **UVa 00732 - Anagram by Stack**:使用栈模拟生成变位词的过程。 - **UVa 01062 - Containers**:模拟过程(最大答案为 26 个栈)。 - **UVa 10858 - Unique Factorization**:使用栈辅助解决因数分解问题。 - **补充阅读**:递归函数调用中的隐式栈、后缀表达式转换与求值(见 9.27 节)。 --- ### C++ STL 队列与双端队列(Java Queue and Deque) 利用队列的先进先出(FIFO)特性或双端队列的灵活性解决模拟问题。 - **UVa 00540 - Team Queue**:修改队列操作。 - **UVa 10172 - The Lonesome Cargo ...**:结合队列和栈使用。 - **UVa 10901 - Ferry Loading III**:使用队列模拟渡轮装载过程。 - **UVa 10935 - Throwing cards away I**:使用队列模拟。 - **UVa 11034 - Ferry Loading IV**:使用队列模拟。 - **UVa 12100 - Printer Queue**:使用队列模拟。 - **UVa 12207 - This is Your Queue**:结合队列和双端队列使用。
码学堂管理员
2026年2月26日 20:20
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码