Responsive image

问题 2903 --排列式交换(思维+数学)

2903: 排列式交换(思维+数学)

时间限制: 1 Sec  内存限制: 256 MB
提交: 0  解决: 2
[提交][状态][讨论版][命题人:]

题目描述

给你一个未经排序的排列组合p1,p2,...,pn。为了对这个排列组合进行排序,你选择一个常数k(k≥1)并对排列组合进行一些操作。在一个操作中,你可以选择两个整数i,j(1≤j<i≤n),使i-j=k,然后交换pi和pj.
你可以选择多大的k值来对给定的排列进行排序?
一个排列组合是一个由1到n的n个不同的整数按任意顺序组成的数组。例如,[2,3,1,5,4]是一个排列组合,但是[1,2,2]不是排列组合(2在数组中出现两次),[1,3,4]也不是排列组合(n=3,但是数组中有4但数组中却有4个)。
一个未排序的排列组合p是一个排列组合,它至少有一个位置i满足pi≠i。

输入描述

每个测试包含多个测试用例。
第一行包含测试用例的数量t(1≤t≤104).测试用例的描述如下。
每个测试用例的第一行包含一个单一的整数n(2≤n≤105)-- permutation的长度p.
每个测试案例的第二行包含n个不同的整数p1,p2,...,pn(1≤pi≤n)它保证给定的数字形成长度为n的排列并且所给的排列组合是未排序的。
保证所有测试案例的n之和不超过2⋅105

输出描述

对于每个测试案例,输出你可以选择的最大的k的最大值来对给定的排列组合进行排序。
我们可以证明,答案总是存在的。

样例输入

7
3
3 1 2
4
3 4 1 2
7
4 2 6 7 5 3 1
9
1 6 7 4 9 2 3 8 5
6
1 5 3 4 2 6
10
3 10 5 2 9 6 7 8 1 4
11
1 11 6 4 8 3 7 5 9 10 2

样例输出

1
2
3
4
3
2
3

来源

[提交][状态]
ACM算法攻关部