网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月02日漏签0天
pascal吧 关注:14,950贴子:132,310
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 20回复贴,共1页
<<返回pascal吧
>0< 加载中...

poj2774求大神

  • 只看楼主
  • 收藏

  • 回复
  • 陈钰彬先生
  • 树网的核
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不知道哪里错了


  • 陈钰彬先生
  • 树网的核
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Program poj2774;
Var i,j,k,m,n,l,p,mi,ans:longint;
s1,s2,str:ansistring;
sum,sa,tsa,rk,trk,h:array[0..210000] of longint;
Begin
readln(s1); readln(s2);
str:=s1+*$*+s2;
mi:=length(s1)+1;
l:=length(str);
for i:=1 to l do
begin
trk[i]:=ord(str[i]); inc(sum[trk[i]]);
end;
for i:=2 to 255 do
begin
inc(sum[i],sum[i-1]);
end;
for i:=l downto 1 do
begin
sa[sum[trk[i]]]:=i; dec(sum[trk[i]]);
end;
rk[sa[1]]:=1; p:=1;
for i:=2 to l do
begin
if trk[sa[i]]<>trk[sa[i-1]] then inc(p);
rk[sa[i]]:=p;
end;
m:=p; j:=1;
while m<l do
begin
move(rk,trk,sizeof(rk));
fillchar(sum,sizeof(sum),0);
p:=0;
for i:=l-j+1 to l do begin inc(p); tsa[p]:=i; end;
for i:=1 to l do
if sa[i]>j then
begin inc(p); tsa[p]:=sa[i]-j; end;
for i:=1 to l do begin rk[i]:=trk[tsa[i]]; inc(sum[rk[i]]); end;
for i:=2 to m do inc(sum[i],sum[i-1]);
for i:=l downto 1 do begin sa[sum[rk[i]]]:=tsa[i]; dec(sum[rk[i]]); end; rk[sa[1]]:=1; p:=1;
for i:=2 to l do begin
if (trk[sa[i]]<>trk[sa[i-1]]) or (trk[sa[i]+j]<>trk[sa[i-1]+j]) then begin
inc(p); rk[sa[i]]:=p; end;
end;
m:=p; j:=j*2;
end;
h[1]:=0; p:=0;
for i:=1 to l do
begin
if rk[i]=1 then continue;
j:=sa[rk[i]-1];
if (i+p<=l) and (j+p<=l) then
while str[i+p]=str[j+p] do
begin
inc(p);
if (i+p)>l then break;
if (j+p)>l then break;
end;
h[rk[i]]:=p;
if p>0 then dec(p);
end;
for i:=2 to l do
begin
if h[i]>ans then
if ((sa[i]<mi) and (sa[i-1]>mi)) or ((sa[i]>mi) and (sa[i-1]<mi)) then ans:=h[i];
end;
writeln(ans);
End.


2026-03-02 23:31:10
广告
不感兴趣
开通SVIP免广告
  • ETODW
  • asset
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题目发上来


  • 陈钰彬先生
  • 树网的核
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题意】
给定两个字符串A 和B,求最长公共子串的长度。
【输入】
两行,两个公共子串
【输出】
一个数字,表示最长公共子串的长度


  • A1Duke
  • asset
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 笠2013
  • 方格取数
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这道题很经典哦,最长公共子序列。可以去看看TYVJ的P1050的题解。这里是我写的代码。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 20回复贴,共1页
<<返回pascal吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示