算法竞赛入门经典第六章例题(22/22)
终于做完第六章了!! 马上做完习题就能学怎么暴力了!!! 快乐!
数据结构这里没有涉及线段树, 树状数组之类的结构, 但学完这一章也能闲时看看, 学一学就行。 基础差不多稳固, 只差习题加深稳固下了👽。
Concurrency Simulator
题意: 让你模拟线程并行, 只包含赋值语句,输出语句,lock, unlock, 和end, 变量初始值为零,给你五种语句的运行需要时间和每个程序的配额,和n个程序
题解: 直接模拟,只有一个cpu, 先读入程序,用队列模拟就绪队列,双端队列模拟堵塞队列, 注意样列有误,得有个样列数,,,uva题面又没有,,被wa到怀疑人生,,,看了udebug才发现,,
1 | /********************************************************* |
Rails
题意:让你模拟火车进站出站,按1~n的顺序进站,问你能否以给定顺序出站
题解:利用栈进行模拟,看能否达成给定顺序,刘大爷的代码没能处理uva上的数据(估计是看着太简单了随手写的,没想到uva输入这么沙雕2333), 最后的坑点自然是uva的日常 ---- 结尾也得用空行
1 | /********************************************************* |
Matrix Chain Multiplication
题意:给你一堆矩阵, 问你能否完成下面的表达式,能的话输出所需的乘法次数,否则输出error
题解:矩阵能进行乘法的条件是A矩阵的列数必须等于B矩阵的行数,否则输出error即可, 能乘时增加的乘法数量是A矩阵的行数乘列数乘B矩阵的列数,用栈进行括号匹配进行表达式解析,模拟即可
1 | /********************************************************* |
Broken Keyboard (a.k.a. Beiju Text)
题意:给你一个字符串,其中包含home键和end键,按下后光标会来到最前面或最后面,让你解析出在home和end影响下的字符串
题解:按题意模拟即可,但若直接数组模拟,会产生移动整个数组等影响,十分费时间,"在数组中移动元素是十分低效的,如果有可能,可以使用链表" -- 刘大爷原话。为此我们采用链表实现,用pos储存光标位置,进行模拟, 用数组实现链表即可
1 | /********************************************************* |
Boxes in a Line
题意:给你一堆标号一到n的盒子, 又给你几个操作:
- 1 x y : 把x盒子移动到y盒子左边
- 2 x y : 把x盒子移动到y盒子右边
- 3 x y : 把x盒子和y盒子互换
- 把所有盒子反序
最后问你所有奇数位置上的盒子序号和是多少
题解:用双向链表处理移动问题,用标记处理反序问题, 注意第三种操作的细节处理
1 | /********************************************************* |
Dropping Balls
题意:在二叉树上模拟小球下落,小球到达一个节点如果当前节点开关为关则往左走,否则往右走,给你d层二叉树,和I个球,问你最后一个球停在了哪里
题解:容易想到直接模拟,但 1 <= I <= 524288, 显然会t掉. 下面想到如果小球是奇数个落到节点上,那么它应该往左走,否则往右走,根据这个模拟,避免了I的影响,只需模拟n层,复杂度合理
1 | /********************************************************* |
Trees on the level
题意:输入一棵二叉树,让你按层次遍历输出所有节点的值
题解:容易想到数组无法存下,则建立链树,读入建立树后用bfs进行层次遍历即可,可用内存池或数组实现二叉树避免内存泄漏问题
1 | /********************************************************* |
下面是数组实现
1 | /********************************************************* |
Tree
题意:给一颗带权二叉树的中序遍历和后序遍历,问你到根权和最小的叶子是哪个,如果有多个,则叶子本身权值更小
题解:按中序遍历和后序遍历建树,并在过程中不断更新答案
1 | /********************************************************* |
Not so Mobile
题意:给你一个天平,问你是否平衡
题解:按输入建立天平,判断是否平衡
1 | /********************************************************* |
The Falling Leaves
题意: 按先序遍历输入一颗树,没有节点的地方为-1, 问你让这些节点全落在同一层, 落在同一点数值相加,问这一层的数值情况
题解:按输入建树,模拟节点位置
1 | /********************************************************* |
Quadtrees
题意:给你两棵32*32图像的四分树的先序遍历,让你合并两棵四分树,问你最后会有多少个黑色块
题解:黑色为黑色,灰色是节点后有黑色,白色为全白,因此,只有灰色节点需要递归往后,根据这个,可只按先序遍历将画面填好即可
1 | /********************************************************* |
Oil Deposits
题意:给你一片油田地,问你有几块油田
题解:直接搜
1 | /********************************************************* |
Ancient Messages
题意:给你一副十六进制组成的图,问你那有哪些古代符号
题解:根据古代符号的内部白色块个数,对给出图进行遍历即可。先将图转化为二进制
1 | /********************************************************* |
Abbott's Revenge
题意:给你一个迷宫, 输入起点,离开时的朝向, 终点,让你求一条最短路,输入为节点跟着路标,第一个字符为进入方向,后面为可出去方向
题解:对人进行模拟,bfs搜索,并记录路径
1 | /********************************************************* |
Ordering Tasks
题意:给任务排序,每个任务有一个前置任务
题解:拓扑排序
1 | /********************************************************* |
Play on Words
题意:给你n个单词,问你能否把这些单词排成一个序列,使每个单词地一个字母和上一个单词最后一个字母相同。
题解:将单词首字母和结尾字母建立一条有向边。问题有解, 当且仅当图为欧拉路径,且判断是否能联通。
1 | /********************************************************* |
Undraw the Trees
题意: 给你n棵树,让你把树转化为括号表示法
题解:递归遍历并输出
1 | /********************************************************* |
Sculpture
题意:给你一个雕塑,问你雕塑的表面积和体积
题解:将雕塑画到三维空间中,进行一次floodfill, 得出雕塑体积和空气内表面积, 得进行离散化处理空间问题
1 |
|
Self-Assembly
题意:给你n种正方形,只有正和负能拼接,问你能否得到一个无限大的结构
题解:根据题意分析,根据正方形建边,当图中存在有向环时,则通过旋转和翻转,一定能得到无限大的结构,进行拓扑排序,找环即可。
1 | /********************************************************* |
Ideal Path
题意:给你n个点,m条边,和每条边的颜色,问你1到n的最短路,且经过边上的颜色字典序最小
题解:刘大爷说明的是走两遍bfs,一遍跑最短路,一遍跑最小字典序。并提出一遍bfs的方法给我读者思考,通过从终点往起点搜,找到到达一个点的更多选择后了选择字典序更小的那个,这对最短路无影响,同时确定了最短路的颜色字典序最小
1 |
|
System Dependencies
题意:模拟liunx的包管理系统,安装和卸载软件,解决依赖问题
题解:安装如果没有显式声明的话无法通过显式卸载卸载,还有依赖的检查,注意这些进行模拟,UVA的样列又(我为什么要说又)出错了,样例最后的那个HTML和TCPIP的删除顺序反了, 说的多组输入也只有一组,,uva标准风格,,
1 | /********************************************************* |
Paintball
题意:有n个敌人,每个敌人有一个坐标和一个攻击半径,问你你能否安全从左边到达右边,能的话输出最北的进出口
题解: 把敌人作为路径, 从上到下进行一次dfs, 如果能连通,则不可能通过,否则能,且与边界交界的 最南的那点就是最北的进出口
1 | /********************************************************* |
爽,再更完习题就能学暴力了!