USACO cafflac
2961 ワード
原文:
http://972169909-qq-com.iteye.com/blog/1084418
1、入力を処理する時、〹include<ctype.h>の3つの関数を使って、便利ですばやいです。
http://972169909-qq-com.iteye.com/blog/1084418
1、入力を処理する時、〹include<ctype.h>の3つの関数を使って、便利ですばやいです。
if(!isalpha(buf[i]))//
if(isupper(buf[i])){//
str[k++] = tolower(buf[i]); //
2、他に注意したいのは ,
3、マッピングの配列を定義して便利に処理するchar buf[MAX], str[MAX];//buf ,str buf
int map[MAX]; //map str buf
4、fgetsを使って改行とスペースを読み込み、文字列につづり合わせる while(fgets(tp, sizeof(tp), stdin)){//fgets
strcat(buf,tp);
}
コード:/*
ID: nenusb1
LANG: C++
TASK: calfflac
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>//int isalpha(int ch), isupper(),tolower()
#define MAX 20000+5
using namespace std;
char buf[MAX], str[MAX];//buf ,str buf
int map[MAX]; //map str buf
int main(){
freopen("calfflac.in","r",stdin);
freopen("calfflac.out","w",stdout);
// 80
char tp[80+5];
int len,i,j;
int maxs = 0, start = 0, end = 0,k = 0;
//************ **********************
while(fgets(tp, sizeof(tp), stdin)){//fgets
strcat(buf,tp);
}
len = strlen(buf);
// printf("%d
", len);
for(i=0; i<len; i++){
if(!isalpha(buf[i]))
continue;
map[k] = i;//buf[i] str[k]
if(isupper(buf[i])){
str[k++] = tolower(buf[i]);
}else{
str[k++] = buf[i];
}
} // k str
// printf("%d
",k);
//************* str , *************
for(i=0; i<k; i++){// i
j=0;
while(1){
if(i-j<0 || i+j>=k || str[i-j] != str[i+j] ) {
break;
}else{
int temp = j*2 + 1;// :BBABB
if(temp > maxs){
start = i-j;
end = i+j;
maxs = temp;
}
}
j++;
}
j=0;
while(1){
if(i-j<0 || i+j+1>=k || str[i-j] != str[i+j+1] ) {
break;
}else{
int temp = (j+1)*2;// :BAAB
if(temp > maxs){
start = i-j;
end = i+j+1;
maxs = temp;
}
}
j++;
}
}
printf("%d
",maxs);
for(i=map[start]; i<=map[end]; i++){
printf("%c",buf[i]);
}
printf("
");
return 0;
}