POJ 3087 shuffle'em up map判重

来源:互联网 发布:天津福禄克数据测试 编辑:程序博客网 时间:2024/06/05 03:20

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

代码如下:

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

原创粉丝点击