Soj-1150 1151
对于给定的状态,判断在规定的步数能否通过3种操作到达,输出的是步数以及操作码
使用广度优先搜索的方法,但是考虑到广搜可以会超时以及出现重复的状态,因此广搜的过程中要实行剪枝,把已经到达过的状态剪去。
值得注意的一点是,如果使用字符串来记录上下状态,一般会超时。
因为这题有写解题报告的作业,所以直接把写了注释的代码搬过来了
Soj-1515
和上面的一题一样,只是把操作和初始状态换了,换汤不换药的一题
Soj-1007
按规律把字符放一个2维矩阵再按顺序输出
Soj-1036
第一排字符,按从小到大是原字符表的纵列,先将其排序,再横向输出即可
Soj-1006
题目要求对于给定的几个预测结果,算出与所有预测距离最近的一个排列。
这题的关键是理解这个距离是怎么算的,举个例子:ABCDE和BCADE。对于ABCDE,排在A后面的是BCDE,排在B后面是CDE,而对于BCADE,排在A后面只有DE,排在B后面的还是有CDE,所以他们距离+2+0,按这样的规律算,可以算出总距离是2。
得到全排列
Soj-1009
梅森素数
Soj-1050
5个数字之间可以任意进行四则运算,求出不大于目标数的最大结果,使用深搜,需要注意的是,5个数字可以不全部用完,结果可以是负数。另外,除法必须要可以整除才能进行。
Soj-1443
输入的2个数字,第一个数字是总共有多少个数,第二个数字是我们所需的数所在的位置。第二行则是该列数字分别的优先度。在这一题里面,队列中的第一个数,如果是优先度最高的,就可以pop掉,否则放到队尾,最后输出的是我们所需的数字是第几个pop的。
使用一个队列queue放真正的位置,一个优先队列priority_queue存放优先度最高的
Soj-1156
构建了一棵树,然后按先序遍历输出这棵树,这题需要注意的是我们在插入的同时要注意找出这棵树的根节点
Soj-1024
输入第一行的2个数字,第一个数字是总共有n个节点,第二个数字是起始点,第二行,是n-1行路径,然后求出国王最多能走多远,节点只能通过一次
Soj-1063
根据输入的信息,查询对应id的员工的boss id和该员工所拥有的部下
相应的规则:
1
2
3
4
| 1.薪酬是唯一的
2.薪酬和身高都比你高的人是你的boss(薪酬>自己,身高>=自己)
3.你的部下必须是薪酬和身高都比你低的人
4.你部下的部下是你的部下(符合第三点)
|
这题使用的是先按薪酬排序,排完序之后,对于要查询的id,找到他的位置,从该位置开始往前扫描,遇到身高比他低的都是他的部下。要注意的是,当遇到一个身高比他高的人的时候,就可以停止继续扫描了,因为这个人薪酬比你低,身高比你高,他是你的同事,他前面身高薪酬比你低的都是他的部下,而同事的部下并不是你的部下。而找boss,则是从自己的位置往前扫,身高大于或者等于自己的那个人。