如何优化遍历一系列数字?

时间:2016-07-09 12:16:48

标签: c++

我正在解决这个问题:

  囚犯,m sweets和s是囚犯。我开始从囚犯身上分发m个糖果,继续以循环方式向每个n囚犯分发一个甜食。我需要找出哪个囚犯会得到最后的甜蜜。

这是我的解决方案:

template <class... UTypes>
explicit tuple(UTypes&&... args);

m,n和s介于1和10 ^ 9之间。 我得到了TLE(超出时间限制)。如何减少此问题的时间复杂度?

1 个答案:

答案 0 :(得分:0)

你不应该优化遍历,你应该消除它。逐个计数很慢,所以你需要提出一个数学公式来产生没有循环的计数。

幸运的是,它并不太难:您从s开始,然后添加一个m次,mod n。因此,您可以计算(s-1) % n (m-1) % n ,将它们一起添加,关于最终结果的% n,并添加1以将基于零的结果转换为基于结果的结果:

(((s-1) % n) + ((m-1) % n)) % n + 1

Demo.

* s减去一个,因为s是基于一个的。
** m减去一,因为第一项是分发给最初的囚犯。