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<l+1)  do{<判断回文长度>}
   begin
    inc(k);dec(j);
   end;
   ifans<k-j-1 then
   begin
    ans:=k-j-1;
    st:=j+1;
    ed:=k-1;
   end;
 end;
 writeln(ans);
 ifans=1 then writeln(a[1])
 else
  for i:=b[st] to b[ed] do{<输出回文(原文)>}
   write(c[i]);
 writeln;
 close(input);close(output);
end.
题目来源: http://ace.delos.com/usacoprob2?a=RexmW8CclSt&S=calfflac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值