思路
这是一道找规律题。
k k k 是 1 0 9 10^9 109,是不可以暴力的,于是想到可以找循环节,直接模拟即可。
代码
#include <bits/stdc++.h>
using namespace std;
//#define int long long
typedef long long ll;
typedef pair<int, int> pr;
#define up(i, l, r) for(int i = (l); i <= (r); i++)
#define down(i, r, l) for(int i = (r); i >= (l); i--)
const int mod = 1000000007;
const int base = 2333;
const double eps = 1e-6;
inline int read() {
int x = 0, f = 1; char ch = getchar();
while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); }
while(ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); }
return x * f;
}
int n, m, k, Q, T, _, ans = 0;
int l1, r1, l2, r2;
int a[107], b[107];
signed main() {
n = read(), k = read();
l1 = read(), r1 = read(), l2 = read(), r2 = read();
int num = 0;
for(int i = 1; i <= n; i++) a[i] = i, b[i] = i;
while(1) {
num++;
reverse(a + l1, a + r1 + 1);
// cout << "num : " << num << "\n";
// for(int i = 1; i <= n; i++) cout << a[i] << " ";
// cout << "\n";
reverse(a + l2, a + r2 + 1);
// cout << "num : " << num << "\n";
// for(int i = 1; i <= n; i++) cout << a[i] << " ";
// cout << "\n";
if(num == k) {
up(i, 1, n) {
printf("%d\n", a[i]);
}
return 0;
}
bool flag = 1;
for(int i = 1; i <= n; i++)
if(a[i] != b[i]) flag = 0;
if(flag) break;
}
k = k % num;
while(k--) {
reverse(b + l1, b + r1 + 1);
reverse(b + l2, b + r2 + 1);
}
up(i, 1, n) printf("%d\n", b[i]);
return 0;
}