Постановка задачи:
Для несортированного массива 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)
Спасибо.
Акаш Кумар
Инженер-программист