zoukankan      html  css  js  c++  java
  • uoj5

    1、30分做法

         枚举子串,对于每个子串枚举前缀,并与后缀判断比较,时间复杂度(L3),空间复杂度(L)

    const oo=1000000007;maxn=1000000+10;
    var t,i1,len,i,j:longint;
        num:array[0..maxn] of int64;
        ans:int64;
        s,s1,s2:ansistring;
    begin
    readln(t);
    for i1:=1 to t do
    begin
      readln(s);
      len:=length(s);
      ans:=1;
      for i:=1 to len do
      begin
        num[i]:=0;
        for j:=1 to i div 2 do
        begin
          s1:=copy(s,1,j);
          s2:=copy(s,i-j+1,j);
          if s1=s2 then inc(num[i]);
        end;
        ans:=ans*(num[i]+1) mod oo;
      end;
      writeln(ans);
    end;
    end.
    

    2、100分做法

         一眼看去像KMP 然而KMP学一次忘一次

         woc我也不知道该怎么讲贴个标程算了

         时间复杂度(L),空间复杂度(L)

    const oo=1000000007;maxn=1000000+10;
    var t,i1,len,i,j:longint;
        num,next:array[0..maxn] of int64;
        ans:int64;
        s:ansistring;
    begin
    readln(t);
    for i1:=1 to t do
    begin
      readln(s);
      len:=length(s);
      j:=0;num[1]:=1;
      for i:=2 to len do
      begin
        while (j>0)and(s[j+1]<>s[i]) do j:=next[j];
        if s[j+1]=s[i] then inc(j);
        next[i]:=j;
        num[i]:=num[j]+1;
      end;
      j:=0;ans:=1;
      for i:=2 to len do
      begin
        while (j>0)and(s[j+1]<>s[i]) do j:=next[j];
        if s[j+1]=s[i] then inc(j);
        while 2*j>i do j:=next[j];
        ans:=ans*(num[j]+1) mod oo;
      end;
      writeln(ans);
    end;
    end.
    

      

  • 相关阅读:
    luogu P1382 楼房
    luogu P1908 逆序对
    5.28 模拟赛
    POJ 2991 Crane
    残(矩阵快速幂)
    AC日记——拍照 洛谷 P3410
    AC日记——[CQOI2014]危桥 洛谷 P3163
    AC日记——【模板】二分图匹配 洛谷 P3386
    AC日记——[ZJOI2009]假期的宿舍 cogs 1333
    AC日记——城市 洛谷 P1401
  • 原文地址:https://www.cnblogs.com/x1273011572/p/6708615.html
Copyright © 2011-2022 走看看