Usaco 1.3.3 Calf Flac

题目:

 calfflac

来源:

 Usaco1.3.3

题目大意:

 求一句话中最长的除标点外的回文,并输出它的长度及包含标点时的样子

数据范围:

 不超过20,000个字符的字符串、最长的回文不会超过2,000个字符(在除去标点符  号、空格之前)

样例:

 Confucius say: Madam, I'm Adam.
11
Madam, I'm Adam

做题思路:

 以每个点为回文中点枚举,数据很弱所以奇偶不必考虑太多,要考虑这个逐字节比较  的usaco,还有可能一行读不下所以用eoln的话。。。

知识点:

 判断回文长度,枚举

{
ID:Dount Nameless
TASK:calfflac
LANG:PASCAL
}
var
 a,c:array[0..20000]of char;
 b:array[0..20000]of longint;
 st,ed,i,j,n,ans,k,l:longint;
begin
 assign(input,'calfflac.in');reset(input);
 assign(output,'calfflac.out');rewrite(output);
 i:=1;
 whilenot eof do
 begin
  read(a[i]);
  inc(j);
  b[i]:=j;
  c[j]:=a[i];
   ifa[i] in ['a'..'z'] then a[i]:=chr(ord(a[i])-32);{<小字母转大字母,因为我看着大的顺眼些,大转小也行>}
   if(a[i] in ['A'..'Z'])then inc(i);{<把字母和句子剥离省的一会判断回文时麻烦>}
 end;
 l:=i-1;
 fori:=2 to l-1 do{<枚举中点,中点的话不会是两边的点吧,那直接输出不就好了>}
 begin
   if(a[i]=a[i-1])and(a[i-1]<>a[i+1])then j:=i-1 else j:=i;{<本来向判断奇偶的不知道用没用或者对没对>}
  k:=i;
  while (a[k]=a[j])and(j>0)and(k}
   begin
    inc(k);dec(j);
   end;
   ifans}
   write(c[i]);
 writeln;
 close(input);close(output);
end.
题目来源: http://ace.delos.com/usacoprob2?a=RexmW8CclSt&S=calfflac

你可能感兴趣的:(Usaco,回文,output,pascal,input,c)