竞赛讨论区 > 什么鬼,过90%然后输出超限
头像
vlouboos
编辑于 2025-10-19 10:25 广东
+ 关注

什么鬼,过90%然后输出超限

题目: 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) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐