CF424A Squats 题解
Content
给定一个长度为 \(n\) 的仅由 x
和 X
组成的字符串,求使得字符串中 x
和 X
的数量相等需要修改的次数,并输出修改后的字符串。
数据范围:\(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;
}