题目描述
给出 n,以及一个长度为 n+1 的数组 [a1,a2,…,an+1],初始时 ai=i (1≤i≤n),an+1=0。
你只能进行以下一种操作,通过输出特定字符串完成操作:
- 输出
i j
:其中 i,j 为正整数,要求 1≤i,j≤n+1,表示把 ai 赋值为 aj。
请把 a 数组的前 n 位向右循环移位 K 位;即,在执行完毕你输出的所有操作后,要求 a 数组第 i (1≤i≤K) 位等于 n−K+i;第 i (K+1≤i≤n) 位等于 i−K,第 n+1 位任意。你只能进行至多 T=⌊1.5n⌋ 次赋值操作。
如果你进行的操作数多于 T 也可以获得部分分,具体地,设你的操作次数为 S:
- 如果 S≤T,得 100 分。
- 如果 T<S≤4T,得 50 分。
- 如果 S>4T,得 0 分。
你在本题的得分是所有测试点中所有数据里得分的最小值。
输入格式
本题单个测试点内有多组数据。
第一行是数据组数 T。
对于每组数据:
第一行两个正整数 n,K。
输出格式
对于每组数据:
在第一行输出操作数 k (0≤k≤4T)。请注意,不需要最小化 k。
接下来 k 行,每行输出两个正整数 i,j,表示一次操作。(1≤i,j≤n+1)
2
3 0
2 1
0
3
3 1
1 2
2 3
提示
所有数据均满足:1≤T≤104,1≤n≤105,0≤K≤n−1。保证同一个测试点中所有 n 的和不超过 5×105。