列表

详情


NC222495. [USACOFeb2020B]SwapitySwap

描述



English (en)
Farmer John's N cows (1≤N≤100) are standing in a line. The ith cow from the left has label i, for each 1≤i≤N.
Farmer John has come up with a new morning exercise routine for the cows. He tells them to repeat the following two-step process exactly K (1≤K≤109) times:

The sequence of cows currently in positions A1…A2 from the left reverse their order (1≤A1<A2≤N).
Then, the sequence of cows currently in positions B1…B2 from the left reverse their order (1≤B1<B2≤N).
After the cows have repeated this process exactly K times, please output the label of the ith cow from the left for each 1≤i≤N.

输入描述

The first line of input contains N and K. The second line contains A1 and A2, and the third contains B1 and B2.

输出描述

On the ith line of output, print the label of the ith cow from the left at the end of the exercise routine.

示例1

输入:

7 2
2 5
3 7

输出:

1
2
4
3
5
7
6

说明:

Initially, the order of the cows is [1,2,3,4,5,6,7] from left to right. After the first step of the process, the order is [1,5,4,3,2,6,7]. After the second step of the process, the order is [1,5,7,6,2,3,4]. Repeating both steps a second time yields the output of the sample.

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 9ms, 内存消耗: 416K, 提交时间: 2022-06-16 19:00:59

#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  int N, K, a1, a2, b1, b2;
  cin >> N >> K >> a1 >> a2 >> b1 >> b2, a1--, a2--, b1--, b2--;
  vector<int> ori(N);
  iota(begin(ori), end(ori), 0);
  auto cur = ori;
  auto pc = begin(cur);
  int period = 0;
  do {
    period++;
    reverse(pc + a1, pc + a2 + 1), reverse(pc + b1, pc + b2 + 1);
  } while (cur != ori);
  for (K %= period; K; K--)
    reverse(pc + a1, pc + a2 + 1), reverse(pc + b1, pc + b2 + 1);

  for (int t : cur) cout << t + 1 << "\n";
}

上一题