【题目】
【分析】 给定三个整数表示出现了三个高峰,并不一定是第一次出现高峰的日子。反正是这一天出现了高峰。
首先想到的方法是: 从d+1开始往后试一直试到21252天,对于每一个日子d,我们看是不是三个高峰同时出现的日子。三个高峰同时出现满足什么条件呢? (d-p)%23 == 0 且 (d-e)%28 == 0 且 (d-i)%33==0 。
但是这个方法比较慢。很多日期可以跳过,不用去做判断。也就是说我们要想办法怎么试的更快一点,这是枚举里面的核心问题,虽然枚举说就是一个个试,但是往往实际解决问题的时候,是不需要每一个都试到的,有些明显不是答案的我们试都不试。在这个题目里面,所谓的试就是,代入上面的式子进行判断。但是在这个题目里面,对于好多的d,根本就不需要尝试就可以排除了。
到底怎么试呢? 基本思想是:如果找到了一个体力高峰,那么从这个体力高峰到下一个体力高峰之间的日子根本都不用试。因此,我们可以想办法找到一个体力高峰的日子,然后就每隔一个体力高峰的周期去做一下尝试。每隔一个体力高峰的周期的日子肯定是体力高峰了,只需要判断是不是感情高峰的日子。直到找到了一个即是体力高峰又是感情高峰的日子,接下来做尝试的时候就只需要试双高峰的日子。体力和感情双高峰的日子,他们出现的间隔是多长呢?当然就是两个间隔的最小公倍数。所以当找到了体力高峰和感情高峰的共同日子以后,接下来尝试的间隔就变成了体力高峰周期和感情高峰周期的最小公倍数,直到试到一个日子同时也是智力高峰。
【代码】
【结果】 自己测试结果:
提交结果:
【总结】 当然本题还有一些数学方法,比如中国剩余定理等,我们也不参加竞赛,面试中也不会考。
|