北大ACM1006报WrongAnswer解决思路

博客主要分析了ACM1006题的解题思路,指出起始时间d并不影响答案,关键在于找到23、28、33的最小公倍数作为周期。博主提醒在计算过程中要注意同余理论的应用,并强调结果需在1到21252之间,否则会导致Wrong Answer。解决方案包括限幅处理和使用中国剩余数定理,最快的策略是创建查找表。
摘要由CSDN通过智能技术生成

在1002题之后,后面的1003到1005实在太过简单,所以就不单独发博文阐述了,有问题可以在评论下面回复。

我们详细讨论一下1006题,题目的大致意思大概是找一个公倍数的问题,也就是这三个数在什么时候有一个可以被整除的时间。除了p,e,i这三个参数,为了迷惑你题目还特地弄了一个起始时间,也就是d,事实上这个并没有什么卵用,唯一的作用只是让你在最后减去d,仅此而已。因此题目的关键就是找到这个日期。而且题目中给了一个很明显的暗示,题中说,所求的时间都会小于21252,有点数学基础的同学会发现这其实就是23 28 33这三个数的最小公倍数,也就是说最后求得的日期一定以21252为周期进行改变。

在明白了这个问题之后呢,我们还需要一点基础数论的知识,关于同余。事实上,我们在得到日期后,第一件事大家都会明白就是把各自对应的数在23 28 33求余,求出的余数实质上对应着三个正整数,i,j,k。例如对于给定的一组数据 283 102 23 320。你先求余,得到 7 18 23 320。然后按照数论的同余写成这个样子。

23+33*k = 7 (mod 23) = 18 (mod 28) (这里是全等号)

也就是我们寻找一个正整数k 满足上面的式子,而且;由于时间小于21252,所以k一定小于645。循环不多,时间挺快就搞定了。

但是,这里有个问题,也可能是大多数同学报Wrong Answer的问题

那就是你所求的结果必须严格在 1 (包括1&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值