题面

#include <bits/stdc++.h>
using namespace std;
int p1,p2,p3;
string s;
//当p3 = 1时输出
void output1() {
for(int i = 0;i < s.size();i++) {
if(s[i] != '-') {
cout << s[i];
continue;
}
//判断开头结尾是否一样
bool start = (s[i - 1] >= '0' && s[i - 1] <= '9');
bool stop = (s[i + 1] >= '0' && s[i + 1] <= '9');
if(start ^ stop || s[i - 1] == s[i + 1] || s[i + 1] < s[i - 1]) {
cout << s[i];
continue;
}
for(int j = s[i - 1] + 1;j < s[i + 1];j++) {
char out;
if(p1 == 3) {
out = '*';
}
else if(start) {
out = j;
}
else if(p1 == 1) {
if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
out = j;
}
else {
out = j + 32;
}
}
else if(p1 == 2) {
if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
out = j - 32;
}
else {
out = j;
}
}
for(int k = 1;k <= p2;k++) {
cout << out;
}
}
}
}
//当p3 = 2时输出
void output2() {
for(int i = 0;i < s.size();i++) {
if(s[i] != '-') {
cout << s[i];
continue;
}
//判断开头结尾是否一样
bool start = (s[i - 1] >= '0' && s[i - 1] <= '9');
bool stop = (s[i + 1] >= '0' && s[i + 1] <= '9');
if(start ^ stop || s[i - 1] == s[i + 1] || s[i + 1] < s[i - 1]) {
cout << s[i];
continue;
}
//反向输出
for(int j =s[i + 1] - 1;j > s[i - 1];j--) {
char out;
if(p1 == 3) {
out = '*';
}
else if(start) {
out = j;
}
else if(p1 == 1) {
if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
out = j;
}
else {
out = j + 32;
}
}
else if(p1 == 2) {
if(s[i - 1] >= 'a' && s[i - 1] <= 'z') {
out = j - 32;
}
else {
out = j;
}
}
for(int k = 1;k <= p2;k++) {
cout << out;
}
}
}
}
int main(){
cin >> p1 >> p2 >> p3;
cin >> s;
if(p3 == 1) {
output1();
return 0;
}
output2();
return 0;
}