Morass

MATCH

Jun 2nd, 2017
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define PB push_back
  4. #define ZERO (1e-10)
  5. #define INF (1<<29)
  6. #define CL(A,I) (memset(A,I,sizeof(A)))
  7. #define DEB printf("DEB!\n");
  8. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  9. #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
  10. typedef long long ll;
  11. typedef long double ld;
  12. typedef pair<ll,ll> pll;
  13. typedef vector<int> vi;
  14. typedef pair<int,int> ii;
  15. typedef vector<ii> vii;
  16. #define IN(n) int n;scanf("%d",&n);
  17. #define FOR(i, m, n) for (int i(m); i < n; i++)
  18. #define REP(i, n) FOR(i, 0, n)
  19. #define F(n) REP(i, n)
  20. #define FF(n) REP(j, n)
  21. #define FT(m, n) FOR(k, m, n)
  22. #define aa first
  23. #define bb second
  24. void ga(int N,int *A){F(N)scanf("%d",A+i);}
  25. #define MX (1<<20)
  26. ll gcd(ll a,ll b,ll&s,ll&t){
  27.     if(!b)return t=0,s=a<0?-1:1,a<0?-a:a;
  28.     ll g=gcd(b,a%b,t,s);t-=a/b*s;return g;
  29. }
  30. ll inv(ll n,ll m){ll s,t;return gcd(n,m,s,t),s>0?s:s+m;}
  31. const ll RW=1<<25,m=5*RW+1,R=243,R1=114609789;
  32. void fft(ll*a,int n,bool I){
  33.     int J=0;
  34.     FT(1,n){
  35.         int b=n>>1;
  36.         while(J>=b)J-=b,b>>=1;
  37.         J+=b;
  38.         if(k<J)swap(a[k],a[J]);
  39.     }
  40.     for(int k=2;k<=n;k<<=1) {
  41.         ll W=I?R1:R;
  42.         for(ll i=k;i<RW;i<<=1)W*=W,W%=m;
  43.         for(int i=0;i<n;i+=k) {
  44.             ll w=1;
  45.             FF(k/2){
  46.                 ll u=a[i+j],v=a[i+j+k/2]*w%m;
  47.                 a[i+j]=u+v<m?u+v:u+v-m;
  48.                 a[i+j+k/2]=u-v>=0?u-v:u-v+m;
  49.                 w*=W,w%=m;
  50.             }
  51.         }
  52.     }
  53.     ll r=inv(n,m);
  54.     if(I)F(n)a[i]=a[i]*1ll*r%m;
  55. }
  56. int fftV(ll*A,int S,ll*B,int R,ll*C){
  57.     int L=1;
  58.     while(L<=S<<1||L<=R<<1)L<<=1;
  59.     fft(A,L,0),fft(B,L,0);
  60.     F(L)C[i]=A[i]*B[i]%m;
  61.     return fft(C,L,1),L;
  62. }
  63. ll P[4][MX],p[4][MX],O[4][MX],S[MX];
  64. char s[MX],r[MX];
  65. int L,Q,l;
  66. #define MP(C) (C==65?0:C==67?1:C=='G'?2:3)
  67. int main(void){
  68.     scanf("%s%s",s,r),L=strlen(s),l=strlen(r);
  69.     F(L)P[MP(s[i])][i]=1;
  70.     F(l)p[MP(r[i])][l-i-1]=1;
  71.     F(4)fftV(P[i],L,p[i],l,O[i]);
  72.     F(4)FF(L)S[j]+=O[i][j];
  73.     printf("%lld\n",l-*max_element(S+l-1,S+L));
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment