题目: 1001 - [NOIP2007] 字符串的展开
新手入门第一道题,暴力写法都会超限?
#include "bits/stdc++.h"
using namespace std;
pair<short, short> getCase(const char a, const char b) {
if (a >= 'a' && a <= 'z') {
if (b >= 'a' && b <= 'z') {
if (a < b) {
return {a + 1, b};
}
return {0, 0};
}
if (b >= 'A' && b <= 'Z') {
if (a - 'a' + 'A' < b) {
return {a + 1, b + 'a' - 'A'};
}
return {0, 0};
}
} else if (a >= 'A' && a <= 'Z') {
if (b >= 'A' && b <= 'Z') {
if (a < b) {
return {a + 'a' - 'A' + 1, b - 'A' + 'a'};
}
return {0, 0};
}
if (b >= 'a' && b <= 'z') {
if (a - 'A' + 'a'< b) {
return {a + 'a' - 'A' + 1, b};
}
return {0, 0};
}
} else if (a >= '0' && a <= '9' && b >= '0' && b <= '9') {
if (a < b) {
return {a + 1, b};
}
return {0, 0};
}
return {0, 0};
}
int main() {
unsigned short p1, p2, p3;
cin >> p1 >> p2 >> p3;
char line[101], lastChar = '\0';
cin >> line;
bool b1 = false;
for (int i = 0; i < 100; i++) {
const char c = line[i];
if (c == '\0') {
if (b1) {
putchar('-');
}
break;
}
if (b1) {
if (auto [fst, snd] = getCase(lastChar, c); fst == 0) {
putchar('-');
} else if (fst >= 'a' && fst <= 'z') {
if (p3 == 1) {
if (p1 == 1) {
for (int k = fst; k < snd; k++) {
for (int l = 0; l < p2; l++) putchar(k);
}
} else if (p1 == 2) {
for (int k = fst; k < snd; k++) {
for (int l = 0; l < p2; l++) putchar(k - 'a' + 'A');
}
} else {
for (int k = fst; k < snd; k++) {
for (int l = 0; l < p2; l++) putchar('*');
}
}
} else {
if (p1 == 1) {
for (int k = snd; k > fst; k--) {
for (int l = 0; l < p2; l++) putchar(k - 1);
}
} else if (p1 == 2) {
for (int k = snd; k > fst; k--) {
for (int l = 0; l < p2; l++) putchar(k - 'a' + 'A' - 1);
}
} else {
for (int k = snd; k > fst; k--) {
for (int l = 0; l < p2; l++) putchar('*');
}
}
}
} else if (fst >= '0' && fst <= '9') {
if (p1 == 3) {
for (int k = fst; k < snd; k++) {
for (int l = 0; l < p2; l++) putchar('*');
}
} else if (p3 == 1) {
for (int k = fst; k < snd; k++) {
for (int l = 0; l < p2; l++) putchar(k);
}
} else if (p3 == 2) {
for (int k = snd; k > fst; k++) {
for (int l = 0; l < p2; l++) putchar(k - 1);
}
}
}
putchar(c);
b1 = false;
lastChar = c;
continue;
}
if (c == '-') {
b1 = true;
} else {
lastChar = c;
putchar(c);
}
}
return 0;
}
全部评论
(0) 回帖