321
社区成员




某台有10个小球的游戏机,其设定的规则如下:
每一轮游戏在开始之前会把编号为0到9的小球依次放入从左到右编号也为0到9的10个位置;游戏开始后会快速对调任意两个球的位置若干次,并在结束时要求观众写出从左到右的小球编号顺序,写对就得奖。
由于速度很快,所以直接靠观看写对很难。但有个程序员发现这台游戏机其实有一个固定的长度为n的操作序列数据库,每一轮游戏都是随机取一个起始操作序列编号和一个结束操作序列编号(操作序列编号从1到n)并从起始到结束依次执行每个操作序列编号对应的操作,而每个操作序列编号对应的操作就是对该次操作指定的两个编号的位置上的小球进行对调。
现在给出操作序列数据库和每一轮游戏的起始操作序列编号和结束操作序列编号,求每轮游戏结束时从左到右的小球编号顺序。
第一行两个正整数n和m,表示操作序列的长度和游戏轮数。 接下来n行,每行两个非负整数a和b,表示每个操作序列指定对调的两个小球所在位置的编号 接下来m行每行两个正整数c和d表示该轮游戏中的起始操作序列编号和结束操作序列编号(c和d都是从1到n之间的正整数且c<d)
m行,代表每轮游戏结束时的小球编号顺序
示例1
输入
5 3
0 1
1 2
2 3
0 1
9 0
3 3
1 5
3 4
输出
0 1 3 2 4 5 6 7 8 9
9 1 3 0 4 5 6 7 8 2
1 0 3 2 4 5 6 7 8 9
每日一练社区新增题目,也许会出现在周赛,暂不提供代码。
小提示:注意题目描述起始操作序列编号和结束操作序列编号
这个题容易让人想复杂了,简单来说,有 n 个交换方式,存放到变量 switch 里,然后,有指定方位的操作,比如 3,3,只操作一次,也就是第三个,索引为2的交换操作,1,5,那么就执行索引为0,1,2,3,4,也就是5个操作,搞明白逻辑就很简单了
n,m = map(int,input().split())
switch = [list(map(int,input().split())) for i in range(n)]
for _ in range(m):
balls = list(range(10))
a,b = map(int,input().split())
for i in range(a - 1,b):
x,y = switch[i]
balls[x],balls[y] = balls[y],balls[x]
print(*balls)