紫书刷题记录
meaqua!!
这个作者很懒,什么都没留下…
展开
-
紫书刷题记录 UVa1572 自组合
这道题真的卡了我好久,一直想错方向了,想用并查集判断连通,像欧拉回路那样= =也想到了拓扑排序,但一直不知道怎么建边。收集了一下dalao们的想法,终于有思路了:比如一个正方形是A+A-B+B-;那么从A+开始,有三种方式A-B+B-;如果走到A-,那么下个出口一定是A+,此时就进入另一个正方形内部了,重复执行即可,所以只需要标记一下该点是否走过即可判环;这里看喜好建图,邻接矩阵/表均可;tips:如果是邻接表千万别开内存池,会RE下面上代码:#include<bits/stdc++.h>原创 2022-03-03 21:57:19 · 205 阅读 · 1 评论 -
紫书刷题记录 UVa297 四分树
感觉紫书上这一部分内容基本都需要递归,也算帮自己初步掌握递归思路了吧!第一次独立完成本章的习题!本题题意很好理解,但是如果只看书的话最后求总黑方块个数的时候会有疑问,最好还是去看看原题。原题是给定了一共有1024个方块,树的层数不超过5。这里给出解题思路:按顺序依次建立两颗四叉树->合并树->根据层数求黑色方块总数量,代码很容易实现,就是递归的时候自己多走两遍会比较清晰。下面放出代码(均有注释):#include<bits/stdc++.h>using namespace s原创 2022-02-16 22:04:44 · 427 阅读 · 0 评论 -
紫书刷题记录 UVa12100 打印队列
看了很多题解用了优先队列,那我这里就用容器+队列。这道题的难点就在于位置的判断,因为优先级是会重复的,队列的位置是不如容器那样好索引的,所以很自然的想到建立一个打印任务的结构体,储存优先级和位置;但问题来了,我们知道队列是不支持随机访问元素的,只能访问头部,那么确定最高的优先级呢?很简单,用一个vector,入队的时候储存优先级,这个vector不需要和队列的位置对应,入队完成后按降序排列,此时vector的第一个元素就是优先级最高的。剩下的就很容易了,依次判断队首的优先级和最高优先级,如果队首优先级小原创 2022-01-29 00:07:28 · 918 阅读 · 0 评论 -
紫书刷题记录UVa10935 卡片游戏
蛮简单的模拟题,一开始想用递归,但看了下感觉不太好确定方程,再次读题发现就队列就能很好的模拟了,思路也很清晰:第一张卡片出队后第二张卡片插入到队尾;重复这个操作即可。这题PE了两三次,输入有点小坑,如果只有一张牌也要输出Discarded cards: 而且貌似每一行的最后一个输出后面不带空格= = 上代码:#include<iostream>#include<queue>#include<algorithm>using namespace std;int ma原创 2022-01-27 10:18:37 · 2588 阅读 · 0 评论 -
紫书刷题记录 UVa1593 代码对齐
不太喜欢这种题,可能是有点怕字符串吧!这题的难点主要在思路的转变,题目要求左对齐且尽量靠左,所以确定每一列的间隔就很重要了。可以把每一列的单词长度最大的那个挑出来作为间隔 比如第一列单词长度最大的abcde那么就以6作为分隔(为什么不是5?因为单词之前至少要空一格)所以该列就以6作为分隔符,其他的以此类推,直接上代码:#include<iostream>#include<string>#include<sstream>#include<map>#i原创 2022-01-26 20:37:23 · 486 阅读 · 0 评论 -
紫书刷题记录:UVa1594,Ducci序列;
本题难度不大,思路也很清晰:元组大小不确定,设置为vector;建立一个集合,集合里每一个元素就是一个元组,每次计算完元组后先判断LOOPor ZERO,如果成立直接退出,否则插入新元组#include<iostream>#include<vector>#include<cmath>#include<algorithm>#include<set>using namespace std;int main(){ int t;原创 2022-01-26 20:22:27 · 586 阅读 · 0 评论