c++问题蜗蜗棋,求解

求正解,题目:
蜗蜗棋 描述 提交 自定义测试 蜗蜗最近沉迷上了蜗蜗棋。 蜗蜗棋里有一颗棋子,一开始出现在数轴上等于 x 的位置。 对于每一步,假设当前棋子的位置为 c ,如果 c<k ,那么蜗蜗会把棋子挪到位置 c+y ,否则蜗蜗会把棋子挪到位置 c−z 。 给定 x,y,z,k,s ,请问 s 步以后棋子在什么位置? 输入格式 第一行一个整数 test 表示数据组数。 对于每组数据,一行五个整数 x,y,z,k,s 。 输出格式 对于每组数据,输出一行一个整数表示棋子最后的位置。 样例输入 2 1 2 3 3 2 1 2 3 3 3 样例输出 0 2 数据规模 对于 30% 的数据,保证 1≤test≤100,1≤s≤10^5 。 对于 100% 的数据,保证 1≤test≤10^5,1≤x,y,z,k,s≤10^9 。

你下次发题目的时候注意排版,这样看的不是很清楚

【以下回答由 GPT 生成】

def final_position(x, y, z, k, s):
    if s == 0:
        return x
    elif x < k:
        if s % 2 == 0:
            return (x + (s//2) * y) % k
        else:
            return (x + (s//2) * y + y) % k
    else:
        return (x - s * z) % k

test = int(input())
positions = []
for _ in range(test):
    x, y, z, k, s = map(int, input().split())
    positions.append(final_position(x, y, z, k, s))

for pos in positions:
    print(pos)

这个问题可以用数学公式来解决。首先,通过观察可以发现,当x小于k时,每步棋子的位置都是在原来的位置x上加上y;当x大于等于k时,每步棋子的位置都是在原来的位置x上减去z。而步数s是在这两种操作之间交替进行的。我们可以根据x与k的关系以及奇偶性,来决定每步棋子的位置。最后通过对k取余来得到最终的位置。

这个解法的时间复杂度为O(1)。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^