我正在尝试解决一个涉及反转列表拼接的问题,但我在测试用例的时间限制方面遇到了问题,即 4 秒。问题:
Farmer John 的 N 头奶牛 (1?N?100) 排成一排。左边的第 i 头奶牛有标签 i,每 1?i?N。农夫约翰为奶牛制定了一个新的晨练程序。他告诉他们准确地重复以下两步过程 K (1?K?1000000000) 次:
当前在位置 A1…A2 的奶牛从左边的顺序颠倒了它们的顺序 (1?A1<A2?N)。然后,当前在位置 B1…B2 从左边开始的奶牛的顺序颠倒它们的顺序 (1?B1<B2?N)。在奶牛重复这个过程正好 K 次后,请输出从左边开始每 1?i?N 的第 i 头奶牛的标签。
评分:测试用例 2-3 满足 K?100。测试用例 4-13 不满足其他约束。
INPUT FORMAT(文件swap.in):输入的第一行包含N和K,第二行包含A1和A2,第三行包含B1和B2。
OUTPUT FORMAT(文件swap.out):在输出的第i行,在例程结束时从左边打印第i头牛的标签。
样品输入:
7 2
2 5
3 7
Run Code Online (Sandbox Code Playgroud)
样品输出:
1
2
4
3
5
7
6
Run Code Online (Sandbox Code Playgroud)
最初,奶牛的顺序是 [1,2,3,4,5,6,7] 从左到右。在过程的第一步之后,顺序是[1,5,4,3,2,6,7]。经过第二步的过程,顺序是[1,5,7,6,2,3,4]。第二次重复这两个步骤会产生样本的输出。
理论上,您可以通过找到程序重复的点,然后模拟相反的k % frequency时间来解决这个问题,其中模拟的次数frequency是唯一的。但我的问题是,当输入是:
100 1000000000
1 94
2 98
Run Code Online (Sandbox Code Playgroud)
我的程序需要 100 多秒才能运行。这个输入特别耗时,因为它运行的迭代次数最多,而且frequency …