专栏文章

题解:CF1733C Parity Shuffle Sorting

CF1733C题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipbks7x
此快照首次捕获于
2025/12/03 09:19
3 个月前
此快照最后确认于
2025/12/03 09:19
3 个月前
查看原文

题目传送门

思路

  • 观察规则可知,当 al+ara_l+a_r 为奇数时,ara_r 不等于 ala_l;否则 al=ara_l=a_r
  • 我们可以利用这个操作来逐渐调整元素的顺序。对于一个数组,可以将其从左到右扫描,尝试将较小的元素移动到左边,较大的元素移动到右边。
  • 考虑以下策略:以先找到数组中的最小元素,通过以上操作将其移动到数组的第一个位置,然后在剩余的数组中找到最小元素,将其移动到第二个位置,之后重复即可。

实现

可以使用两层循环解决题目,外层循环控制要放置的位置,内层循环用于寻找合适的元素并进行操作。

代码

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,a[100010];
signed main() {
	scanf("%lld",&t);
	while(t--) {
		scanf("%lld",&n);
		for(int i=1; i<=n; i++) {
			scanf("%lld",&a[i]);
		}
		if(n==1) {
			printf("0\n");
			return ;
		}
		printf("%lld\n",n-1);
		printf("1 %lld\n",n);
		if((a[1]+a[n])%2==0) a[1]=a[n];
		else a[n]=a[1];
		for(int i=2; i<n; i++) {
			if((a[1]+a[i])%2==0) {
				printf("%lld %lld\n",i,n);
			} else {
				printf("1 %lld\n",i);
			}
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...