我正在解决这个问题:
囚犯,m sweets和s是囚犯。我开始从囚犯身上分发m个糖果,继续以循环方式向每个n囚犯分发一个甜食。我需要找出哪个囚犯会得到最后的甜蜜。
这是我的解决方案:
template <class... UTypes>
explicit tuple(UTypes&&... args);
m,n和s介于1和10 ^ 9之间。 我得到了TLE(超出时间限制)。如何减少此问题的时间复杂度?
答案 0 :(得分:0)
你不应该优化遍历,你应该消除它。逐个计数很慢,所以你需要提出一个数学公式来产生没有循环的计数。
幸运的是,它并不太难:您从s
开始,然后添加一个m
次,mod n
。因此,您可以计算(s-1) % n
和(m-1) % n
,将它们一起添加,关于最终结果的% n
,并添加1
以将基于零的结果转换为基于结果的结果:
(((s-1) % n) + ((m-1) % n)) % n + 1
* 从s
减去一个,因为s
是基于一个的。
** 从m
减去一,因为第一项是分发给最初的囚犯。