题目链接:
题意:给我一个A序列的长度N,和四个正整数:P,Q,R,S,在这里P,Q,R,S满足 要求:( 1 =< P, Q, R, S <= N);且同时存在:Q-P = S - R;
要求我们通过交换A序列的 [P, Q]区间的元素和 [R, S]区间的元素,从而获得B序列!
思路:
挖掘题目性质:
1、交换的不是单个元素,而是区间元素!
2、两个区间的长度一致!
3、所以我们可以设想,两个指针,分别指向两个区间的第一个元素,然后同步向后移动,每次移动完毕后,就进行元素的交换!
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int N = 1e2 + 10;
int a[N];
int main()
{
int n, p, q, r, s;
cin >> n >> p >> q >> r >> s;
for (int i=1; i <= n; i ++)
cin >> a[i];
//直接在a序列本身上进行交换!
for (int i=p, j=r; i <= q; i ++, j ++)
swap (a[i], a[j]);
for (int i=1; i <= n; i ++)
cout << a[i] << ' ';
return 0;
}