#include <stdio.h>
#define DEBUG 0
#define TESTCASES 8
#define MAX_CHARS 20000
char arrayOfChars[MAX_CHARS + 1];
int numOfChars;
char arrayOfLetters[MAX_CHARS + 1];
int numOfLetters;
int map[MAX_CHARS + 1];
int main(){
#if DEBUG
int testCase;
for (testCase = 1; testCase <= TESTCASES; testCase++){
char inputFileName[20] = "inputx.txt";
inputFileName[5] = '1' + (testCase - 1);
freopen(inputFileName, "r", stdin);
printf("\n#%d\n", testCase);
#endif
numOfChars = numOfLetters = 0;
char cha;
while ( scanf("%c", &cha) != EOF ){
arrayOfChars[numOfChars++] = cha;
if (cha >= 'a' && cha <= 'z'){
map[numOfLetters] = numOfChars - 1;
arrayOfLetters[numOfLetters++] = cha;
}
else if (cha >= 'A' && cha <= 'Z'){
//记录下标
map[numOfLetters] = numOfChars - 1;
arrayOfLetters[numOfLetters++] = 'a' + cha - 'A';
}
}
int maxPalindrome = 0;
int start = 0;
int end = 0;
int mid;
//枚举回文串中间字符
for (mid = 0; mid < numOfLetters; mid++){
int half = 0;
int left = 0;
int right = 0;
//回文串由奇数个字符组成
while (1){
left = mid - half;
right = mid + half;
if (left < 0 || right >= numOfLetters || arrayOfLetters[left] != arrayOfLetters[right]){
if (half * 2 - 1 > maxPalindrome){
maxPalindrome = half * 2 - 1;
start = left + 1;
end = right - 1;
}
break;
}
half++;
}
//回文串由偶数个字符组成
half = 0;
while (1){
left = mid - half;
right = mid + half + 1;
if (left < 0 || right >= numOfLetters || arrayOfLetters[left] != arrayOfLetters[right]){
if (half * 2 > maxPalindrome){
maxPalindrome = half * 2;
start = left + 1;
end = right - 1;
}
break;
}
half++;
}
}
printf("%d\n", maxPalindrome);
int startIndex = map[start];
int endIndex = map[end];
int indexOfChar;
for (indexOfChar = startIndex; indexOfChar <= endIndex; indexOfChar++)
printf("%c", arrayOfChars[indexOfChar]);
printf("\n");
#if DEBUG
}
#endif
return 0;
}
USACO 1.3 Calf Flac (枚举)
最新推荐文章于 2023-08-01 10:09:38 发布