Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
DP做法。f[i,j,k]表示以i字母开头,长度为j,以k结尾的串有多少个 f[i,j,k]+=f[i,j-1,p] (1<=p<=k-1) 然后sum[i,j]表示以长度为i,开头为j的有多少个。 最后一步步加起来就可以了。 var s:string; f:array['a'..'z',1..10,'a'..'z']of longint; sum:array[0..10,'a'..'z']of longint; i,j,k,tmp,len,ans:longint; ch1,ch2,ch3,ch:char; procedure init_judge; begin readln(s); for i:=2 to length(s) do if s[i]<=s[i-1] then begin writeln(0); halt; end; end; procedure prework; begin for ch:='a' to 'z' do f[ch,1,ch]:=1; for ch1:='a' to 'z' do for len:=2 to 10 do for ch2:='a' to 'z' do for ch3:='a' to chr(ord(ch2)-1) do inc(f[ch1,len,ch2],f[ch1,len-1,ch3]); for len:=1 to 10 do for ch1:='a' to 'z' do for ch2:='a' to 'z'do inc(sum[len,ch1],f[ch1,len,ch2]); end; procedure dawn; begin len:=length(s); for i:=1 to len-1 do for ch:='a' to 'z' do inc(ans,sum[i,ch]); for ch:='a' to chr(ord(s[1])-1) do inc(ans,sum[len,ch]); for i:=2 to len do for ch:=chr(ord(s[i-1])+1) to chr(ord(s[i])-1) do inc(ans,sum[len-i+1,ch]); inc(ans); writeln(ans); end; begin init_judge; prework; dawn; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator