CF424A Squats 题解

Content

给定一个长度为 \(n\) 的仅由 xX 组成的字符串,求使得字符串中 xX 的数量相等需要修改的次数,并输出修改后的字符串。

数据范围:\(2\leqslant n\leqslant 200,2\mid n\)

Solution

首先得统计一下 x 的个数 \(num_x\)X 的个数 \(num_X\),不难看出,答案就是 \(\dfrac{|num_x-num_X|}{2}\)。得到答案后再扫一遍把出现次数多的字符替换成出现次数少的字符,直到出现次数相等为止。

Code

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

int len, numx, numX;
string s;

int main() {
	scanf("%d", &len);
	cin >> s;
	for(int i = 0; i < len; ++i) numx += (s[i] == 'x'), numX += (s[i] == 'X');
	printf("%d\n", abs(numx - numX) / 2);
	if(numx > numX)
		for(int i = 0; i < len; ++i) {
			if(s[i] == 'x') {
				s[i] = 'X', numx--, numX++;
				if(numx == numX) {cout << s; return 0;}
			}
		}
	else if(numx == numX) {cout << s; return 0;}
	else
		for(int i = 0; i < len; ++i)
			if(s[i] == 'X') {
				s[i] = 'x', numx++, numX--;
				if(numx == numX) {cout << s; return 0;}
			}
	return 0;
}

posted @ 2021-12-16 15:12  Eason_AC  阅读(31)  评论(0)    收藏  举报