USACO 3.2 分析

 题目一:Factorials

题目大意:求n!的最后非0位。

算法:模拟

1.2的因子的个数显然比5多很多;

2.可以预先根据5的个数估计出末尾0的个数,然后只需保存多余2的个数,去更新末位的值;

3.实际做的时候没有想到上述方法,而是鬼使神差地想到保存末5位,但是无法证明!

 

 

题目二:Stringsobits

题目大意:在所有长度为N的1的位数不超过K的二进制数中(包含前导0),求出第I大的数

算法:DP

状态转移方程:S[I][J]表示长度为I用1的个数不大于J的二进制数的个数;

S[I][J] = S[I-1][J]+S[I-1][J-1],很像C(A,B)的递推公式啊!

初始条件:s[0][i] = 1,1 <= i <= K

还有一点要注意的是2^31 超过LONGINT的表示范围,可以用UNSIGHED LONGINT,读入格式scanf("%u", &a)

 

题目三:Spinning Wheels

题目大意:有若干个有缺口的转动着的轮子,转的过程是离散的,以时间1为基本单位,求出什么时候在某处光线可以通过。

一种思路是状态仍是离散保存,只保存起始点和末端点,用时间更新初始坐标,判断的时候考虑到有些段可能跨越360的临界,就要分别判断是在360内还是360外。

特别注意:只要有一点缝隙,光就可以过!

 

 

还有一种思路是用BOOL来保存状态,效率相对较低;

 

题目四:Feed Ratios

1.由于数据比较小,可以BRUTE FORCE,关键在于3点共线判断的方法,不推荐用斜率的方法去做,最好用向量的方法去做;

2.本题可以用Cream方程组的知识去做,以下是USACO官方的解答

 

题目五:Magic Squares

算法:BFS

1.康托展开(Cantor),给出一个1-N的排列,求1-N的全排列字典序中的位置;

2.康托展开的逆运算是给出位置,找到这个排列。

3.这道题要用Cantor + Hash可以有效节约空间

 

题目六:Sweet Butter

算法:SPFA

题目大意:给出一张图,有一些人在某些点,求出最小的集合代价。

由于这张图边比较稀疏,用邻接表存好,且访问起来更方便;

用SPFA分别求出任意两点间的最短路。

 

很好,这一个星期的任务完成了,不过接下来还要奋战学校的OJ啊!加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值