B题
注意这道题题目要求
Sort the given array a using no more than n cyclic shifts of any of its segments. Note that you don't need to minimize the number of cyclic shifts. Any method that requires n or less cyclic shifts will be accepted.
只要排序即可,不需要最小化步骤,那就简单了,直接暴力做.从前往后,按顺序,每次排一个数,排的同时输出存储操作步骤,可以用三个数组分别存储操作l,r,d.
举例

  1. 第一步 2,5,1,4,3 变成 1,2,5,4,3
  2. 第二步 1,2,5,4,3 变成 1,2,3,5,4
  3. 第三步 1,2,3,5,4 变成 1,2,3,4,5
    以下是一组数据:
    输入:
    4
    2
    2 1
    3
    1 2 1
    4
    2 4 1 3
    5
    2 5 1 4 3
    输出:
    1
    1 2 1
    1
    2 3 1
    2
    1 3 2
    3 4 1
    3
    1 3 2
    3 4 1
    3 5 2

    -------------------------------------------------------分割线

以下是ac代码:

#include <bits/stdc++.h>
using namespace std;
int a[100];
struct node
{
    int a, b, c;
} num[100];
int main()
{
 //   freopen("1.txt", "w", stdout);
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        int tot = 0;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            for (int j = 1; j < i; j++)
            {
                if (a[i] < a[j])
                {
                    int x = a[i];
                    num[tot++] = {j, i, i - j};

                    for (int k = i; k > j; k--)
                        a[k] = a[k - 1];
                    a[j] = x;
                    break;
                }
            }
        }
        cout << tot << "\n";

        for (int i = 0; i < tot; i++)
        {
            printf("%d %d %d\n", num[i].a, num[i].b, num[i].c);
        }
        /*
        for (int i = 1; i <= n; i++)
        {
            printf("%d ",a[i]);
        }
        puts("");
        */
    }
    return 0;
}