题解,包对包会
2026-09-15 21:57:23
发布于:广东
执行用时:4ms
内存消耗:1.38MB
击败了99.86%的用户
击败了100.00%的用户
#include <unistd.h>
static char inBuf[1 << 16];
static int inLen = 0, inPos = 0;
inline int readChar() {
if (inPos == inLen) {
inLen = read(0, inBuf, sizeof(inBuf));
inPos = 0;
if (inLen <= 0) return -1;
}
return inBuf[inPos++];
}
static char outBuf[1 << 16];
static int outLen = 0;
inline void outChar(char c) {
outBuf[outLen++] = c;
if (outLen == (int)sizeof(outBuf)) {
write(1, outBuf, outLen);
outLen = 0;
}
}
inline void outInt(int v) {
char tmp[12];
int tl = 0;
if (v == 0) tmp[tl++] = '0';
else while (v) { tmp[tl++] = '0' + v % 10; v /= 10; }
while (tl) outChar(tmp[--tl]);
}
int main() {
int t = 0;
int c = readChar();
while (c <= ' ') c = readChar();
while (c > ' ') { t = t * 10 + (c - '0'); c = readChar(); }
while (t--) {
char s[2005];
int n = 0, total = 0;
c = readChar();
while (c <= ' ') c = readChar();
while (c > ' ') {
s[n++] = (char)c;
total += c - 96;
c = readChar();
}
if (n & 1) {
int pre = 0;
int minOdd = 1000000000;
int minEven = 0;
int maxEven = 0;
for (int i = 0; i < n; i++) {
pre += s[i] - 96;
if ((i + 1) & 1) {
int sum = pre - minOdd;
if (sum > maxEven) maxEven = sum;
if (pre < minOdd) minOdd = pre;
} else {
int sum = pre - minEven;
if (sum > maxEven) maxEven = sum;
if (pre < minEven) minEven = pre;
}
}
int diff = (maxEven << 1) - total;
if (diff > 0) {
outChar('A'); outChar('C'); outChar(' ');
outInt(diff);
} else {
outChar('D'); outChar(' ');
outInt(-diff);
}
} else {
outChar('A'); outChar('C'); outChar(' ');
outInt(total);
}
outChar('\n');
}
if (outLen > 0) write(1, outBuf, outLen);
return 0;
}
全部评论 1
看懂的人,都看懂了



2026-09-15 来自 广东
0





有帮助,赞一个