POJ 3087 shuffle'em up map判重

这道题说的是洗牌,已知一沓牌的初始状态,问经过多少次洗牌能达到给定状态,或者永远不能。想起前阵子看的《欺诈游戏》里面的一场扑克赛,秋山逼迫洗牌手用perfect_shuffle,其实就是这道题里的这种洗牌方式,结果成功算出了所有牌的位置。这也说明这种洗牌方式对牌的排列是有铁打的规律的,确实如此,简单思考便可以得出这个规律,于是问题便得以简化,不断地按照洗牌规律变换牌的排列顺序,每次洗完牌对比目标状态,如果相同则打印退出,否则将当前状态存储,以便及时发现循环,也就是不能达到目标状态的情况。发现循环就是“判重”,map和hash是最合适的判重工具,实际就是存储状态并能快速找到状态是否存在的工具。hash查找速度更快,但是相对复杂并且耗费存储,而map直观简单,但是查找速度不如hash。据说map的查找速度是logN,等着看一下map的实现。这道题我用的是map。

代码如下:

POJ上的人明显少了,刷新了好几次我的提交还在首页上,可能都去山寨POJ了吧,我还是喜欢老版,希望能一直保留下去吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值