Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

大牛帮忙看一下,老是wrong answer

Posted by yedeming at 2010-03-17 13:00:56 on Problem 2774
const q=131131;
      p=29;
var s,s1:ansistring;
    i,j,n,m,min,max,mid,r,kind:longint;
    hash:array[0..q]of ansistring;
    ch:array['a'..'z']of longint;
    cc:char;
function ha(x:longint;s:ansistring):boolean;
begin
    while hash[x]<>'' do begin
        if hash[x]=s then exit(false);
        x:=(x+1)mod q;
    end;
    if kind=1 then hash[x]:=s;
    exit(true);
end;
function ok(x:longint):boolean;
var i,l,pp:longint;
    ss:ansistring;
begin
    fillchar(hash,sizeof(hash),0);
    r:=1;
    for i:=2 to x do r:=r*p mod q;
    pp:=10000*q;
    l:=0;
    kind:=1;
    for i:=1 to x do
    l:=(l*p+ch[s[i]])mod q;
    ss:=copy(s,1,x);
    ha(l,ss);
    for i:=x+1 to n do begin
        delete(ss,1,1);
        ss:=ss+s[i];
        l:=(((l-r*ch[s[i-x]]+pp)mod q)*p+ch[s[i]])mod q;
        ha(l,ss);
    end;
    l:=0;
    kind:=2;
    for i:=1 to x do
    l:=(l*p+ch[s1[i]])mod q;
    ss:=copy(s1,1,x);
    if not ha(l,ss) then exit(true);
    for i:=x+1 to m do begin
        delete(ss,1,1);
        ss:=ss+s1[i];
        l:=(((l-r*ch[s1[i-x]]+pp)mod q)*p+ch[s1[i]])mod q;
        if not ha(l,ss) then
        exit(true);
    end;
    exit(false);
end;
begin
    readln(s);n:=length(s);
    readln(s1);m:=length(s1);
    min:=1;
    for cc:='a' to 'z' do ch[cc]:=ord(cc)-96;
    if n<m then max:=n
    else max:=m;
    while min<max do begin
        mid:=(min+max+1)shr 1;
        if ok(mid) then
        min:=mid
        else max:=mid-1;
    end;
    writeln(min);
end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator