PAT 2019 9月8号总结

第一题:

一个整数A,所有位加起来为m,A+1的所有位数加起来为n,m和n的最大公约数为大于2的质数,则A称为永远数。

给出m个查询,每个查询给出k(A的位数)和 m(A的位数和),找出可能的A,以及对应的n。

采用dfs和回溯剪枝。每一层dfs确定以为,当遍历深度为k的时候,结束,判定该数字是否为永远数。

每一位可能取的值为0——9,深度为0,也就是第一层,数字不能为0。

剪枝,每一层可以取0——9,但是保证剩余的的位数的位数字之和不能大于9*(k-depth)。即还剩下k-depth位数字没有确定,但是前面确定的数字之和,用总和减去后剩下的以经大于每一位是9的情况,也就是说,剩余的k-depth每一位都是9,最后的总和也是小于m的,这种情况就不往下dfs了,直接剪掉。(这会少掉数量级的情况)

第二题:

两个序列,按照长的为2 短的 1的顺序输出一次输出。

常规链的处理。先用unordered_map存所以结点。再从两个序列的起点遍历得到两条链。确定那一条是长链。长链从前往后遍历。短链从后往前遍历。加入最后一条总链。如果某一条链没了。就跳出。把两条链剩下的结点加入总链。最后遍历输出总链,除了最后一个结点,i结点的地址输出i+1结点的地址。

第三题:

静态树输出后缀表达式。将每个结点存起来。并且把每个结点的左右孩子记录。没有的那个就是根结点。

找到根结点后后序遍历。如果左右子树都有,就“(” + 左子树 + 右子树 + 根节点 + ")"遍历。如果左子树没有;

就“(” + 根结点 + 右子树 + ")"遍历。最后输出字符串。

第四题:

dijkstra。判断每个序列时候为dijkstra.

按照dijkstra 遍历。看每次对应的序列上的点,在这一伦中是否是d[u]最小的点。若不是,就结束遍历,输出false。若n个结点访问结束。输出true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值