北京交通大学第七届新生程序设计竞赛题解

突然想起来还有这么个博客……决定以后每次打完比赛把会写的题写个题解在这里,也算是督促自己补题吧……

毕竟是新生赛,题目大部分还是比较水的……

A:

相当简单的计算,数据范围并不大,每次答案加上n/3,n(剩下的钱)变成n%3+n/3,直接循环到n<3即可。

B:

题目看上去很复杂,仔细读题发现, 所谓反向复读其实就是每一步走的路径要求是一个回文串,也就是中心对称。也即是说,对于一个点,只要指定了一个中心点,无论怎么走,这一步最终走到的都是关于这个中心点中心对称的对面那个点。而一条前半段路径成立的条件是,路径上的每一个点关于这个中心点对称的那个点都不是障碍物。因此,进行两次预处理,第一次预处理枚举一个中心点,求出其他点关于这个中心点对称的点是否是障碍。第二次预处理一样是枚举中心点,借助第一次预处理得到的结果进行DFS,能走到的点就说明从那个点可以以这个中心点为中心走出一步到对称点。两次预处理之后,我们得到了任意一个点以另一个点为对称中心能否走出一步。之后只要从起点BFS就可以了。

C:

比较暴力的模拟,数据范围不大,直接若干循环枚举每一天之后把数字拼起来暴力判断回文就可以了。

D:

乍一看像是数据结构加优化(事实上考场上除了HYX大佬以外其他人确实都是这么A的……),实际上如果采用并查集的路径压缩的思路,每次判断完之后将这个点直接连向下一个点,在查找时进行一下路径压缩,可以发现每个点最多被重复访问常数次,均摊效率是O(n)级别。考场上均摊效率算错了以为会T就没有敲QAQ

E:

数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值