A - Range Swap
把 p ~ q 和 r ~ s 区间的数交换位置
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, p, q, r, s;
int a[N];
int main() {
cin >> n >> p >> q >> r >> s;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = p-1, j = r-1, cnt = 0; cnt < q - p + 1; i++, j++, cnt++) {
swap(a[i], a[j]);
}
for(int i = 0; i < n; i++) cout << a[i] << ' ';
return 0;
}
B - Cat
将字符串中的 na 替换为 nya
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
string s;
cin >> n >> s;
for(int i = 0; i < n; i++) {
if(s[i] == 'a' && s[i-1] == 'n') {
s.insert(i, "y"); //在 i 前插入
i++;
n++;
}
}
cout << s;
return 0;
}
C - Rotate and Palindrome
枚举操作a的次数(0 ~ n - 1),每次判断当前 0 ~ n-1次操作a产生的新字符串是否为回文,只要字符串左边部分的字符与对应右边部分的字符不相等,进行一次操作b。最后只需要取每次枚举a次数中最小的结果。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll n, a, b;
cin >> n >> a >> b;
string s;
cin >> s;
ll res = 1e18;
for(int i = 0; i < n; i++) {
ll t = (ll)a * i;
//将第一个字符移到字符串末尾,0次a操作不需要
if(i != 0) {
char op = s[0];
for(int j = 0; j < n - 1; j++) {
s[j] = s[j+1];
}
s[n-1] = op;
}
for(int k = 0, ed = n - 1; k < ed; k++, ed--) {
if(s[k] != s[ed]) {
t += b;
}
}
res = min(res, t);
}
cout << res;
return 0;
}