Description
Srwudi的家是一幢h层的摩天大楼。由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方便的上楼。
经过改造,srwudi的跳楼机可以采用以下四种方式移动:
- 向上移动x层;
- 向上移动y层;
- 向上移动z层;
- 回到第一层。
一个月黑风高的大中午,DJL来到了srwudi的家,现在他在srwudi家的第一层,碰巧跳楼机也在第一层。DJL想知道,他可以乘坐跳楼机前往的楼层数。
Input Format
第一行一个整数h,表示摩天大楼的层数。
第二行三个正整数,分别表示题目中的x, y, z。
Output Format
一行一个整数,表示DJL可以到达的楼层数。
Input Sample
1 | 15 |
Output Sample
1 | 9 |
Hint
可以到达的楼层有:1,5,8,9,10,12,13,14,15
1≤h≤1018,1≤x,y,z≤105
题解
很神奇的题目。。。一开始看到就想起了NOIp2017D1T1小凯的疑惑。
莫非这题是那题的变态加强版?然后也有O(1)的解法???
emmm看了一下好像并不行。。。然后发现我只会做两个操作的
首先我们来简化一下题意,题目要求h=ax+by+cz(h<=H)这么一个h的所有不同取值的个数。
既然题目有三种操作,我们就一个个考虑过去。
我们首先考虑两种操作(这里我们选择操作2、3我就喜欢这么选)
假设我们这时通过几次操作2和几次操作3到了楼层i,再来看操作1对答案的贡献,这时候我们可以做任意次的操作1,此时操作1对答案的贡献就是(H−i)/X
这样我们就可以统计答案了吗?
并不行。在我们统计答案的时候,会发现有重复。而且i≤1018的范围我们也无法承担。
那么我们需要选择一种不存在重复的统计方式。
看下数据范围,发现1≤x,y,z≤105,所以肯定是在这里搞事情。
然后我们考虑进行mod操作。
记录fi表示仅通过操作2和操作3可以到达的在mod X=i意义下的最小楼层。
那么我们可以得到f数组的转移式
- f(i+y)mod x=f(i)+y
- f(i+z)mod x=f(i)+z
对转移式进行观察,我们发现这就是在求最短路时我们进行转移的式子!f在这里就相当于求最短路时的dis
那么我们就可以快速求出所有fi的值。
然后统计答案,就顺利解决了。
1 |
|