This is a problem on codeforces 并且我已经提交了解决方案,并且获得了TLE。 如何删除TLE
#example1 {
border: 2px solid red;
border-radius: 25px;
}
#example2 {
border: 2px solid red;
border-radius: 50px 20px;
}
答案 0 :(得分:2)
问题似乎在算法级别上。代替生成所有候选i
值然后测试它们是否可被k
整除的方法,您可以直接在循环中以等于k
的增量生成这些值。
最小值imin
等于k*((y+1)/k)
或k*((y+1)/k) + k
,取决于y+1
是否可被k
整除。
您有两个收获:您考虑减少k
个候选人,并且避免了昂贵的%
操作。
此外,当您找到一个值时,可以直接打印它,而无需记住它。
编辑:这是代码
#include <iostream>
int main()
{
std::ios::sync_with_stdio(false);
unsigned int y, k, n;
std::cin >> y >> k >> n;
unsigned int imin = k*((y+1)/k);
if (imin < y+1) imin += k;
if (imin > n) {
std::cout << -1;
return 0;
}
for (unsigned int i = imin; i <= n; i+=k)
{
std::cout << i-y << " ";
}
return 0;
}
编辑2:可以通过更改循环边界来避免最后一次i-y
计算