Постановка задачи:

Для несортированного массива arr [] размера N поверните его на D элементов (по часовой стрелке).

Входные данные:
Первая строка входных данных содержит T, обозначающее количество тестов. Первая строка каждого тестового примера содержит два элемента, разделенных пробелом: N, обозначающее размер массива, и целое число D, обозначающее числовой размер поворота. Следующая строка будет содержать N элементов массива, разделенных пробелами.

Вывод:
Для каждого теста в новой строке выведите повернутый массив.

Ограничения:
1 ‹= T‹ = 200
1 ‹= N‹ = 107
1 ‹= D‹ = N
0 ‹= arr [i] ‹= 105

Пример:
Ввод:
2
5 2
1 2 3 4 5
10 3
2 4 6 8 10 12 14 16 18 20

Вывод:
3 4 5 1 2
8 10 12 14 16 18 20 2 4 6

Пояснение:
Тестовый пример 1: 1 2 3 4 5 при повороте на 2 элемента становится 3 4 5 1 2.

Код и алгоритм:

/* author : @akash */
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define pb push_back
#define mod 1000000007
#define ld long double
void solve()
{
  int n,d;
  cin>>n>>d;
  int a[n];
  for(int i=0;i<n;++i)
  {
   cin>>a[i];
  }
  for(int i=0;i<d;++i)
  {
   int tmp=a[0];
   for(int j=1;j<n;++j)
   {
    a[j-1]=a[j];
   }
   a[n-1]=tmp;
  }
  for(int i=0;i<n;++i)
  {
   cout<<a[i]<<" ";
  }
}
int main()
{
 ios_base::sync_with_stdio(0);
 cin.tie(0);
 cout.tie(0);
 int t;
 cin>>t;
 while(t--)
 {
            solve();
            cout<<"\n";     
 }
 return 0;
}
// time complexity of this algorithm is : T(n)=O(n*d)

Спасибо.

Акаш Кумар

Инженер-программист