Latex代码测试

这篇博客主要介绍了如何使用LaTeX进行字符串匹配算法的实现,包括SAM、AAM和BAM算法,并展示了大整数的加减乘除运算。通过代码示例,阐述了字符串匹配的原理以及大整数运算的处理方法,适合对算法和数学计算感兴趣的读者阅读。
摘要由CSDN通过智能技术生成

# i n c l u d e &lt; q u e u e &gt; \#include&lt;queue&gt; #include<queue>
# i n c l u d e &lt; s t d i o . h &gt; \#include&lt;stdio.h&gt; #include<stdio.h>
# i n c l u d e &lt; s t r i n g . h &gt; \#include&lt;string.h&gt; #include<string.h>
# i n c l u d e &lt; a l g o r i t h m &gt; \#include&lt;algorithm&gt; #include<algorithm>
# d e f i n e   N   4010 \#define\ N\ 4010 #define N 4010
u s i n g   n a m e s p a c e   s t d ; using\ namespace\ std; using namespace std;
s t r u c t   V {   i n t   x , y , d ;   }   z ; struct\ V\{\ int\ x,y,d;\ \}\ z; struct V{  int x,y,d; } z;
c h a r   A [ N ] , B [ N ] ;   i n t   n , m , l [ N ] , f [ N ] [ N ] ;   q u e u e &lt; V &gt;   q ; char\ A[N],B[N];\ int\ n,m,l[N],f[N][N];\ queue&lt;V&gt;\ q; char A[N],B[N]; int n,m,l[N],f[N][N]; queue<V> q;
n a m e s p a c e   S A M { namespace\ SAM\{ namespace SAM{
i n t   s [ N ] [ 26 ] , m x [ N ] , f [ N ] , c n t = 1 , l s t = 1 ; \quad int\ s[N][26],mx[N],f[N],cnt=1,lst=1; int s[N][26],mx[N],f[N],cnt=1,lst=1;
i n l i n e   i n t   e x t e n d ( i n t   c ) { \quad inline\ int\ extend(int\ c)\{ inline int extend(int c){
i n t   p = l s t , n p = l s t = + + c n t , q , n q ; \quad \quad int\ p=lst,np=lst=++cnt,q,nq; int p=lst,np=lst=++cnt,q,nq;
m x [ n p ] = m x [ p ] + 1 ; \quad \quad mx[np]=mx[p]+1; mx[np]=mx[p]+1;
f o r ( ; p &amp; &amp; ! s [ p ] [ c ] ; p = f [ p ] )   s [ p ] [ c ] = n p ; \quad \quad for(;p\&amp;\&amp;!s[p][c];p=f[p])\ s[p][c]=np; for(;p&&!s[p][c];p=f[p]) s[p][c]=np;
i f ( ! p )   r e t u r n   f [ n p ] = 1 ; \quad \quad if(!p)\ return\ f[np]=1; if(!p) return f[np]=1;
q = s [ p ] [ c ] ; \quad \quad q=s[p][c]; q=s[p][c];
i f ( m x [ q ] = = m x [ p ] + 1 )   f [ n p ] = q ; \quad \quad if(mx[q]==mx[p]+1)\ f[np]=q; if(mx[q]==mx[p]+1) f[np]=q;
e l s e { \quad \quad else\{ else{
n q = + + c n t ; \quad \quad \quad nq=++cnt; nq=++cnt;
m x [ n q ] = m x [ p ] + 1 ; \quad \quad \quad mx[nq]=mx[p]+1; mx[nq]=mx[p]+1;
f [ n q ] = f [ q ] ;   f [ q ] = f [ n p ] = n q ; \quad \quad \quad f[nq]=f[q];\ f[q]=f[np]=nq; f[nq]=f[q]; f[q]=f[np]=nq;
m e m c p y ( s [ n q ] , s [ q ] , 26 &lt; &lt; 2 ) ; \quad \quad \quad memcpy(s[nq],s[q],26&lt;&lt;2); memcpy(s[nq],s[q],26<<2);
f o r ( ; p &amp; &amp; s [ p ] [ c ] = = q ; p = f [ p ] )   s [ p ] [ c ] = n q ; \quad \quad \quad for(;p\&amp;\&amp;s[p][c]==q;p=f[p])\ s[p][c]=nq; for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;
} \quad \quad \} }
} \quad \} }
i n l i n e   v o i d   m a t c h ( ) { \quad inline\ void\ match()\{ inline void match(){
f o r ( i n t   x = 1 , i = 1 , c = 0 ; i &lt; = n ; + + i ) { \quad \quad for(int\ x=1,i=1,c=0;i&lt;=n;++i)\{ for(int x=1,i=1,c=0;i<=n;++i){
f o r ( ; x &gt; 1   &amp; &amp;   ! s [ x ] [ A [ i ] − ′ a ′ ] ; x = f [ x ] ) ; \quad \quad \quad for(;x&gt;1\ \&amp;\&amp;\ !s[x][A[i]-&#x27;a&#x27;];x=f[x]); for(;x>1 && !s[x][A[i]a];x=f[x]);
c = m x [ x ] ; \quad \quad \quad c=mx[x]; c=mx[x];
i f ( ! s [ x ] [ A [ i ] − ′ a ′ ] )   l [ i ] = 0 ;   e l s e { \quad \quad \quad if(!s[x][A[i]-&#x27;a&#x27;])\ l[i]=0;\ else\{ if(!s[x][A[i]a]) l[i]=0; else{
x = s [ x ] [ A [ i ] − ′ a ′ ] ;   l [ i ] = + + c ; \quad \quad \quad \quad x=s[x][A[i]-&#x27;a&#x27;];\ l[i]=++c; x=s[x][A[i]a]; l[i]=++c;
} \quad \quad \quad \} }
} \quad \quad \} }
} \quad \} }
} \} }
n a m e s p a c e   A A M { namespace\ AAM\{ namespace AAM{
i n t   s [ N ] [ 26 ] ; \quad int\ s[N][26]; int s[N][26];
i n l i n e   v o i d   b u i l d ( ) { \quad inline\ void\ build()\{ inline void build(){
f o r ( i n t   i = 1 ; i &lt; = n ; + + i ) \quad \quad for(int\ i=1;i&lt;=n;++i) for(int i=1;i<=n;++i)
f o r ( i n t   j = i − 1 ; ; − − j ) { \quad \quad \quad for(int\ j=i-1;;--j)\{ for(int j=i1;;j){
s [ j ] [ A [ i ] − ′ a ′ ] = i ; \quad \quad \quad \quad s[j][A[i]-&#x27;a&#x27;]=i; s[j][A[i]a]=i;
i f ( A [ j ] = = A [ i ]   ∣ ∣   ! j )   b r e a k ; \quad \quad \quad \quad if(A[j]==A[i]\ ||\ !j)\ break; if(A[j]==A[i]  !j) break;
} \quad \quad \quad \} }
} \quad \} }
} \} }
n a m e s p a c e   B A M { namespace\ BAM\{ namespace BAM{
i n t   s [ N ] [ 26 ] ; \quad int\ s[N][26]; int s[N][26];
i n l i n e   v o i d   b u i l d ( ) { \quad inline\ void\ build()\{ inline void build(){
f o r ( i n t   i = 1 ; i &lt; = m ; + + i ) \quad \quad for(int\ i=1;i&lt;=m;++i) for(int i=1;i<=m;++i)
f o r ( i n t   j = i − 1 ; ; − − j ) { \quad \quad \quad for(int\ j=i-1;;--j)\{ for(int j=i1;;j){
s [ j ] [ B [ i ] − ′ a ′ ] = i ; \quad \quad \quad \quad s[j][B[i]-&#x27;a&#x27;]=i; s[j][B[i]a]=i;
i f ( B [ j ] = = B [ i ]   ∣ ∣   ! j )   b r e a k ; \quad \quad \quad \quad if(B[j]==B[i]\ ||\ !j)\ break; if(B[j]==B[i]  !j) break;
} \quad \quad \quad \} }
} \quad \} }
} \} }
i n l i n e   v o i d   d f s ( i n t   x , i n t   y , i n t   d ) { inline\ void\ dfs(int\ x,int\ y,int\ d)\{ inline void dfs(int x,int y,int d){
f o r ( i n t   i = 0 ; i &lt; 26 ; + + i ) \quad for(int\ i=0;i&lt;26;++i) for(int i=0;i<26;++i)
i f ( A A M : : s [ x ] [ i ] &amp; &amp; ! S A M : : s [ y ] [ i ] ) { \quad \quad if(AAM::s[x][i]\&amp;\&amp;!SAM::s[y][i])\{ if(AAM::s[x][i]&&!SAM::s[y][i]){
∗ l = m i n ( ∗ l , d + 1 ) ;   r e t u r n ; \quad \quad \quad *l=min(*l,d+1);\ return; l=min(l,d+1); return;
} \quad \quad \} }
f o r ( i n t   i = 0 ; i &lt; 26 ; + + i ) \quad for(int\ i=0;i&lt;26;++i) for(int i=0;i<26;++i)
i f ( A A M : : s [ x ] [ i ] &amp; &amp; S A M : : s [ y ] [ i ] ) \quad \quad if(AAM::s[x][i]\&amp;\&amp;SAM::s[y][i]) if(AAM::s[x][i]&&SAM::s[y][i])
d f s ( A A M : : s [ x ] [ i ] , S A M : : s [ y ] [ i ] , d + 1 ) ; \quad \quad \quad dfs(AAM::s[x][i],SAM::s[y][i],d+1); dfs(AAM::s[x][i],SAM::s[y][i],d+1);
} \} }
i n t   m a i n ( ) { int\ main()\{ int main(){
s c a n f ( &quot; % s % s &quot; , A + 1 , B + 1 ) ; \quad scanf(&quot;\%s\%s&quot;,A+1,B+1); scanf("%s%s",A+1,B+1);
n = s t r l e n ( A + 1 ) ;   m = s t r l e n ( B + 1 ) ; \quad n=strlen(A+1);\ m=strlen(B+1); n=strlen(A+1); m=strlen(B+1);
f o r ( i n t   i = 1 ; i &lt; = n ; + + i )   S A M : : e x t e n d ( B [ i ] − ′ a ′ ) ; \quad for(int\ i=1;i&lt;=n;++i)\ SAM::extend(B[i]-&#x27;a&#x27;); for(int i=1;i<=n;++i) SAM::extend(B[i]a);
S A M : : m a t c h ( ) ; \quad SAM::match(); SAM::match();
A A M : : b u i l d ( ) ;   B A M : : b u i l d ( ) ; \quad AAM::build();\ BAM::build(); AAM::build(); BAM::build();
∗ l = n ;   f o r ( i n t   i = 1 ; i &lt; = n ; + + i )   i f ( l [ i ] &lt; i )   ∗ l = m i n ( ∗ l , l [ i ] + 1 ) ; \quad *l=n;\ for(int\ i=1;i&lt;=n;++i)\ if(l[i]&lt;i)\ *l=min(*l,l[i]+1); l=n; for(int i=1;i<=n;++i) if(l[i]<i) l=min(l,l[i]+1);
p r i n t f ( &quot; % d \ n &quot; , ∗ l ) ;   ∗ l = n ; \quad printf(&quot;\%d\backslash n&quot;,*l);\ *l=n; printf("%d\n",l); l=n;
f o r ( i n t   i = 1 ; i &lt; = n ; + + i ) { \quad for(int\ i=1;i&lt;=n;++i)\{ for(int i=1;i<=n;++i){
i n t   x = 0 ; \quad \quad int\ x=0; int x=0;
f o r ( i n t   j = i ; j &lt; = n ; + + j ) { \quad \quad for(int\ j=i;j&lt;=n;++j)\{ for(int j=i;j<=n;++j){
x = B A M : : s [ x ] [ A [ j ] − ′ a ′ ] ; \quad \quad \quad x=BAM::s[x][A[j]-&#x27;a&#x27;]; x=BAM::s[x][A[j]a];
i f ( ! x ) {   ∗ l = m i n ( ∗ l , j − i + 1 ) ;   b r e a k ;   } \quad \quad \quad if(!x)\{\ *l=min(*l,j-i+1);\ break;\ \} if(!x){  l=min(l,ji+1); break; }
} \quad \quad \} }
} \quad \} }
p r i n t f ( &quot; % d \ n &quot; , ∗ l ) ;   d f s ( 0 , 1 , 0 ) ; \quad printf(&quot;\%d\backslash n&quot;,*l);\ dfs(0,1,0); printf("%d\n",l); dfs(0,1,0);
p r i n t f ( &quot; % d \ n &quot; , ∗ l ) ;   ∗ l = n ; \quad printf(&quot;\%d\backslash n&quot;,*l);\ *l=n; printf("%d\n",l); l=n;
q . p u s h ( ( V ) { 0 , 0 , 0 } ) ; \quad q.push((V)\{0,0,0\}); q.push((V){ 0,0,0});
f o r ( i n t   x , y , d ; ! q . e m p t y ( ) ; q . p o p ( ) ) { \quad for(int\ x,y,d;!q.empty();q.pop())\{ for(int x,y,d;!q.empty();q.pop()){
z = q . f r o n t ( ) ; \quad \quad z=q.front(); z=q.front();
f o r ( i n t   i = 0 ; i &lt; 26 ; + + i ) i f ( x = A A M : : s [ z . x ] [ i ] ) { \quad \quad for(int\ i=0;i&lt;26;++i)if(x=AAM::s[z.x][i])\{ for(int i=0;i<26;++i)if(x=AAM::s[z.x][i]){
i f ( ! ( y = B A M : : s [ z . y ] [ i ] ) ) {   p r i n t f ( &quot; % d \ n &quot; , z . d + 1 ) ;   r e t u r n   0 ;   } \quad \quad \quad if(!(y=BAM::s[z.y][i]))\{\ printf(&quot;\%d\backslash n&quot;,z.d+1);\ return\ 0;\ \} if(!(y=BAM::s[z.y][i])){  printf("%d\n",z.d+1); return 0; }
e l s e   i f ( ! f [ x ] [ y ] ) {   f [ x ] [ y ] = 1 ;   q . p u s h ( ( V ) { x , y , z . d + 1 } ) ;   } \quad \quad \quad else\ if(!f[x][y])\{\ f[x][y]=1;\ q.push((V)\{x,y,z.d+1\});\ \} else if(!f[x][y]){  f[x][y]=1; q.push((V){ x,y,z.d+1}); }
} \quad \quad \} }
} \quad \} }
} \} }


# i n c l u d e   &lt; c s t d i o &gt; \#include\ &lt;cstdio&gt; #include <cstdio>
# i n c l u d e   &lt; i o s t r e a m &gt; \#include\ &lt;iostream&gt; #include <iostream>
# i n c l u d e   &lt; a l g o r i t h m &gt; \#include\ &lt;algorithm&gt; #include <algorithm>
# i n c l u d e   &lt; c s t r i n g &gt; \#include\ &lt;cstring&gt; #include <cstring>
# i n c l u d e   &lt; c s t r i n g &gt; \#include\ &lt;cstring&gt; #include <cstring>
# i n c l u d e   &lt; c m a t h &gt; \#include\ &lt;cmath&gt; #include <cmath>

t y p e d e f   l o n g   l o n g   l l ; typedef\ long\ long\ ll; typedef long long ll;

i n t   p o w e r m o d ( i n t   a ,   i n t   e x p ,   i n t   m o d e r ) int\ powermod(int\ a,\ int\ exp,\ int\ moder) int powermod(int a, int exp, int moder)
{ \{ {
     i n t   r e t   =   1 ; \ \ \ \ int\ ret\ =\ 1;     int ret = 1;
     f o r   ( ;   e x p ;   e x p   &gt; &gt; =   1 ) \ \ \ \ for\ (;\ exp;\ exp\ &gt;&gt;=\ 1)     for (; exp; exp >>= 1)
     { \ \ \ \ \{     {
         i f   ( e x p   &amp;   1 ) \ \ \ \ \ \ \ \ if\ (exp\ \&amp;\ 1)         if (exp & 1)
         { \ \ \ \ \ \ \ \ \{         {
             r e t   =   1 l l   ∗   r e t   ∗   a   %   m o d e r ; \ \ \ \ \ \ \ \ \ \ \ \ ret\ =\ 1ll\ *\ ret\ *\ a\ \%\ moder;             ret = 1ll  ret  a % moder;
         } \ \ \ \ \ \ \ \ \}         }
         a   =   1 l l   ∗   a   ∗   a   %   m o d e r ; \ \ \ \ \ \ \ \ a\ =\ 1ll\ *\ a\ *\ a\ \%\ moder;         a = 1ll  a  a % 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值