<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      luogu 4608

      emmmm...

      做這題之前強烈推薦先去寫一下壓位高精度加法,壓十八位就行...

      然后有一個東西叫序列自動機,其實就是一個指針,用$n*|字符集|$的時空找到每個字符的下一次出現(xiàn)位置

      然后如果想找到兩個字符串的所有公共子序列只需要在序列自動機上dfs即可

      重點看代碼:

      #include <cstdio>
      #include <cmath>
      #include <cstring>
      #include <cstdlib>
      #include <iostream>
      #include <algorithm>
      #include <queue>
      #include <stack>
      #define ll long long
      using namespace std;
      const ll lim=1000000000000000000ll;
      int nxt[3505][60][2];
      int vis[3505][3505];
      struct Bignum
      {
          ll f[15];
          int ilen;
          friend Bignum operator  + (Bignum a,Bignum b)
          {
              Bignum ret;
              memset(ret.f,0,sizeof(ret.f));
              for(int i=1;i<=max(a.ilen,b.ilen);i++)
              {
                  ret.f[i]+=a.f[i]+b.f[i];
                  if(ret.f[i]>=lim)ret.f[i+1]+=ret.f[i]/lim,ret.f[i]%=lim;
              }
              ret.ilen=max(a.ilen,b.ilen);
              while(ret.f[ret.ilen]>=lim)ret.f[ret.ilen+1]+=ret.f[ret.ilen]/lim,ret.f[ret.ilen]%=lim,ret.ilen++;
              while(ret.f[ret.ilen+1])ret.ilen++;
              return ret;
          }
      }dp[3105][3105];
      char ret[3505];
      int ttop=0;
      void build(char *s,int ilen,int num)
      {
          for(int i=ilen-1;i>=0;i--)
          {
              for(int j=1;j<=58;j++)nxt[i][j][num]=nxt[i+1][j][num];
              nxt[i][s[i+1]-'A'+1][num]=i+1;
          }
      }
      void dfs(int x,int y)
      {
          printf("%s\n",ret+1);
          for(int i=1;i<=58;i++)
          {
              if(nxt[x][i][0]&&nxt[y][i][1])
              {
                  ret[++ttop]=i+'A'-1;
                  dfs(nxt[x][i][0],nxt[y][i][1]);
                  ret[ttop]=' ';
                  ttop--;
              }
          }
      }
      void redfs(int x,int y)
      {
          if(vis[x][y])return;
          vis[x][y]=1;
          dp[x][y].ilen=dp[x][y].f[1]=1;
          for(int i=1;i<=58;i++)
          {
              if(nxt[x][i][0]&&nxt[y][i][1])
              {
                  redfs(nxt[x][i][0],nxt[y][i][1]);
                  dp[x][y]=dp[x][y]+dp[nxt[x][i][0]][nxt[y][i][1]];
              }
          }
      }
      ll n,m;
      int typ;
      char s1[1005],s2[1005];
      int main()
      {
          scanf("%lld%lld",&n,&m);
          scanf("%s%s",s1+1,s2+1);
          build(s1,n,0),build(s2,m,1);
          scanf("%d",&typ);
          if(typ)dfs(0,0);
          redfs(0,0);
          for(int i=dp[0][0].ilen;i>=1;i--)
          {
              if(i==dp[0][0].ilen)printf("%lld",dp[0][0].f[i]);
              else printf("%018lld",dp[0][0].f[i]);
          }
          return 0;
      }

       

      posted @ 2019-07-08 07:48  lleozhang  Views(166)  Comments(0)    收藏  舉報
      levels of contents
      主站蜘蛛池模板: 国产精品高清国产三级囯产AV| 中国女人高潮hd| 国产高清一区二区三区视频| 最新的国产成人精品2020| 亚洲av二区三区在线| 不卡在线一区二区三区视频| 亚洲色最新高清AV网站| 日韩视频一区二区三区视频| 国产人妻人伦精品婷婷| 日本夜爽爽一区二区三区| 国产亚洲一区二区三区成人| 亚洲精品不卡av在线播放| 99久久婷婷国产综合精品青草漫画| 加勒比亚洲天堂午夜中文| www插插插无码免费视频网站| 成人特黄特色毛片免费看| 激情综合网激情激情五月天| av深夜免费在线观看| 亚洲色大成网站WWW久久| 亚洲熟妇少妇任你躁在线观看无码| 欧美牲交a欧美牲交aⅴ一| 最新亚洲av日韩av二区| 欧美乱码伦视频免费| 久久成人影院精品777| 成人免费无码av| 免费无码成人AV片在线| 9丨精品国产高清自在线看| 日韩黄色av一区二区三区| 亚洲一级特黄大片一级特黄| 亚洲一区二区日韩综合久久| 亚洲高潮喷水无码AV电影| 精品日韩精品国产另类专区| 内射视频福利在线观看| 中文字幕日韩精品有码| av午夜福利一片看久久| 国内精品无码一区二区三区| 成人午夜视频在线| 国产一区在线播放无遮挡| 国产毛片基地| 日韩区中文字幕在线观看| 蜜臀av入口一区二区三区|