USACO 3.2.5

纠结了几天,在昨晚AC了一道bfs后,又鏖战了几个小时,学了很多新东西,写了140+行代码,终于AC.

题目的本质是一道bfs,状态8!=40320(不是7!,顺便就在NOCOW上纠正了),不需要剪枝(一个简单的剪枝是到达目标状态就停止).

个人认为难点有两个:

1.节点编解码要用到康托展开;

2.答案要求输出操作序列,所以要记录方案.

另外要注意操作数为0的情况,以及USACO的linux系统与Windows的区别.

(康托展开和输出操作序列的方法将另行记录)

 

另:关于状态数

7位hash没问题,但是空间仍是8!=40320,而不是7!=5040.因为如果空间是7!的话,那么排列1234567和1234568将算作一个排列,重复了,所以一定会错. 另外,如果使用Contor展开的话,必须是8位,因为Contor展开是基于全排列的.

--by Climber.pI


Executing...
   Test 1: TEST OK [0.011 secs, 3688 KB]
   Test 2: TEST OK [0.011 secs, 3688 KB]
   Test 3: TEST OK [0.000 secs, 3688 KB]
   Test 4: TEST OK [0.000 secs, 3688 KB]
   Test 5: TEST OK [0.011 secs, 3688 KB]
   Test 6: TEST OK [0.043 secs, 3688 KB]
   Test 7: TEST OK [0.054 secs, 3688 KB]
   Test 8: TEST OK [0.086 secs, 3688 KB]

All tests OK.

Your program ('msquare') produced all correct answers!  This is your
submission #4 for this problem.  Congratulations!


 

[Code](由于Sina的限制就没代码高亮了)CSDN自带代码高亮.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值