每日一题cf

Swap and Reverse

题意:

给定一个长度为n的正整数数组,给定k。可以进行任意次一下操作

  • 选定 i i i,交换 a i a_{i} ai a i + 2 a_{i+2} ai+2的值
  • 选定 i i i,对区间 [ a i , a i + k − 1 ] [a_{i},a_{i+k-1}] [ai,ai+k1]进行翻转

题解:

  • 对于操作一:只能交换下标奇偶性相同的值。
  • 对于操作二:若k为奇数,也只能交换下标奇偶性相同的值,若k为偶数,结合操作一则可以任意交换两个相邻的元素,所以对于所有位置元素可以任意交换。

代码:

#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;

const int N = 1e5+10;
typedef long long ll;

char str[N];

void sovle() {
	
	int n, k;
	cin >> n >> k;
	cin >> str;
//当k为奇数时,回用到进行分下标为奇数和偶数排序
	vector<char> a, b;
	
	if (k % 2 == 0) {
		sort(str, str + n);
		for (int i = 0; i < n; i++)cout << str[i];
	}
	else {
		
//只需要分奇数和偶数排序,就能涵盖所有点
		
		for (int i = 0; i <= n - 1; i += 2) a.push_back(str[i]);
		for (int i = 1; i <= n - 1; i += 2) b.push_back(str[i]);
		
		sort(a.begin(), a.end());
		sort(b.begin(), b.end());
		
//交叉打印
		int l1 = 0, l2 = 0;
		
		for (int i = 1; i <= n; i++) {
			if (i % 2) {
				cout << a[l1];
				l1++;
			}
			else {
				cout << b[l2];
				l2++;
			}
		}
	}
	
	cout << endl;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int t;
	cin >> t;
	while (t--) {
		sovle();
	}
	return 0;
}

相关推荐

  1. 每日cf

    2024-07-10 21:08:06       10 阅读
  2. 每日】补档 CF371 D. Vessels | 并查集 | 简单

    2024-07-10 21:08:06       16 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 21:08:06       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 21:08:06       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 21:08:06       4 阅读
  4. Python语言-面向对象

    2024-07-10 21:08:06       7 阅读

热门阅读

  1. Vue3+Element-plus的表单重置

    2024-07-10 21:08:06       7 阅读
  2. #B. 等离子电视

    2024-07-10 21:08:06       11 阅读
  3. 纤程和协程理解

    2024-07-10 21:08:06       8 阅读
  4. 几款常见的数字孪生引擎

    2024-07-10 21:08:06       8 阅读
  5. C++:cv.absdiff函数含义

    2024-07-10 21:08:06       11 阅读
  6. 自动回复机器人:源码搭建与智能化客户服务

    2024-07-10 21:08:06       11 阅读
  7. 社群管理新助手:导航群机器人的智能化功能

    2024-07-10 21:08:06       9 阅读