P3500.第1题-小红的排列
题目内容
给定长度为 n 的排列 {p1,p2,…,pn},定义一次操作为:
选择两个不同的位置 i,j ,将 pi 增加 1 ,同时将 Pj 减少 1 ;同时需要保证每次操作后,数组仍是 1 到 n 的一个排列。
问将数组变为严格递增排列 {1,2,…,n} 需要的最少操作次数。
长度为 n 的排列是由 1,2,...,n 这 n 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,{2,3,1,5,4} 是一个长度为 5 的排列,而 {1,2,2} 和 {1,3,4} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
输入描述
第一行输入整数 n(1≤n≤103) 表示排列长度;
第二行输入 n 个整数 p1,p2,...,pn(1≦pi≦n) ,它们构成 1 到 n 的个排列。
输出描述
第一行输出一个整数 k ,表示需要的最少操作次数。
此后 k 行,第 i 行输出两个整数 xi,yi(1≦xi,yi≦n;xi=yi) ,表示第 i 次操作将 Pxi 増加 1 ,Pyi ; 减少 1 .
如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
样例1
输入
3
3 2 1
输出
3
3 2
3 1
2 1
说明
在这个样例中,初始排列为 {3,2,1}:
第一次操作 (x1=3,y1=2) 后排列变为 {3,1,2} ;
第二次操作 (x2=3,y2=1) 后排列变为 {2,1,3} ;
第三次操作 (x3=2,y3=1) 后排列变为 {1,2,3} ;
综上,通过 3 次操作将排列变为严格递增排列 1,2,3 。我们可以证明,这是最少需要的操作次数。
样例2
输入
1
1
输出
0