先用暴力搜索搜了几个小数据,发现是唯一解,而且有规律的。然后就把规律找出来了。我写两组就知道规律了。
IN
3 1 2
2
1
3
队伍 1 2 3
第一场 2 1 3
第二场 1 3 2
第三场 3 2 1
IN
5 2 4
1
3
2
5
4
队伍 1 2 3 4 5
第一场 2 1 3 5 4
第二场 5 3 2 4 1
第三场 4 2 5 1 3
第四场 1 5 4 3 2
第五场 3 4 1 2 5
观察:第一组数据:开始给的1号队伍的比赛,2,1,3;后来构造出来后,2号队伍比赛:第一场已知,打1号,然后下来是1,3,2和1号队伍纵向顺序一致,只是开头不位置不一样;3号队伍也一样,1,3,2的顺序,从第三场开始的。
第二组数据一样:还是1,3,2,5,4的错位循环。
于是大胆猜测:就是个错为循环过程,每个队伍循环开始打头的位置就是他和给定的M队打的那轮。
代码(真他妈简短):
var n,m,t,qi,i:longint;
a,b:array[1..1000] of longint;
begin
readln(n,m,t);
for i:=1 to n do readln(a[i]);
for qi:=1 to n do if a[qi]=m then break;
for i:=1 to qi-1 do
a[n+i]:=a[i];
for i:=1 to n do
begin if t>=i then b[a[i]]:=a[qi+t-i] else
b[a[i]]:=a[qi+t+n-i];
end;
for i:=1 to n-1 do
write(b[i], );writeln(b[n]);
end.