-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblock swap.cpp
69 lines (54 loc) · 1015 Bytes
/
block swap.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
code by harsha_76
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef std::vector<int> vi;
#define all(x) x.begin(), x.end()
#define rep(i, start, end) for(int i=start;i<end;i++)
void swapf(int a[], int f, int s, int d)
{
for(int i=0;i<d;i++)
{
int temp=a[f+i];
a[f+i]=a[s+i];
a[s+i]=temp;
}
}
void rotate(int a[], int d, int n)
{
if(d==0||d==n)
return;
if(d>n)
d=d%n;
if(d==n-d)
{
swapf(a, 0, n-d, d);
return;
}
else if(d<n-d)
{
swapf(a, 0, n-d, d);
rotate(a, d, n-d);
}
else
{
swapf(a, 0, d, n-d);
rotate(a+n-d, 2*d-n, d);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int a[]={1, 2, 3, 4, 5, 6, 7};
rotate(a, 6, 7);
for(int e:a)
{
cout<<e<<' ';
}
cout<<'\n';
return 0;
}