ABDELRHMAN_SAEED007

Untitled

Oct 18th, 2025
647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ld long double
  4. #define F first
  5. #define S second
  6. #define Lnode 2*node+1
  7. #define Rnode 2*node+2
  8. #define MID (l+r>>1)
  9. #define el '\n'
  10. #define coutf(x) for(auto v:(x)) cout<<v<<' '; cout<<el
  11. #define coutp(x) for(auto v:(x)) cout<<v.F<<' '<<v.S<<el
  12. #define cinl(x) for(auto &v:(x)) cin>>v;
  13. #define all(x)  x.begin(),x.end()
  14. #define ll long long
  15. #define sz(x)  (int)x.size()
  16. #define pi pair<ll,ll>
  17. #define pii pair<ll,pair<ll,ll>>
  18. #define vi vector<ll>
  19. using ull = unsigned long long;
  20. string x,y;
  21. int n,m;
  22. int idx=1;
  23. vector<ll>pref;
  24.  
  25. vector<ll>compute(const string& s)
  26. {
  27.     int sz=s.size();
  28.     vector<ll>phi(sz,0);
  29.     for (int i=1,k=0;i<sz;i++){
  30.         k=phi[i-1];
  31.         while (k>0&&s[i]!=s[k])k=phi[k-1];
  32.         if (s[i]==s[k])k++;
  33.         phi[i]=k;
  34.     }
  35.     return phi;
  36. }
  37. const int N=1e4+4,M=1e3+3,oo=1e9;
  38. int dp[N][M],vis[N][M];
  39. int autom[M][26],autovis[M][26];
  40. int next_j(int j,char c)
  41. {
  42.     if (j==0) return (y[0]==c);
  43.     if (y[j]==c)return j+1;
  44.     int &ret=autom[j][c-'a'];
  45.     if (autovis[j][c-'a']==idx)return ret;
  46.     autovis[j][c-'a']=idx;
  47.  
  48.     return ret=next_j(pref[j-1],c);
  49. }
  50. int kmp(int i,int j){
  51.     if (j>=m)return oo;
  52.     if (i>=n)return 0;
  53.     int &ret=dp[i][j];
  54.     if (vis[i][j]==idx)return ret;
  55.     vis[i][j]=idx;
  56.     ret=oo;
  57.     ret=min(ret,1+kmp(i+1,j));
  58.  
  59.     j=next_j(j,x[i]);
  60.         ret=min(ret,kmp(i+1,j));
  61.  
  62.     return ret;
  63. }
  64.  
  65. void solve()
  66. {
  67.     while(cin>>x>>y)
  68.     {
  69.  
  70.     n=x.size(),m=y.size();
  71.     pref=compute(y);
  72.     cout<<kmp(0,0);
  73.     idx++;
  74.  
  75.     }
  76.  
  77.  
  78.  
  79. }
  80.  
  81.  
  82.  
  83.  
  84. int32_t main(){
  85. #ifndef ONLINE_JUDGE
  86.     freopen("in.txt", "r", stdin);
  87.     //freopen("output.txt", "w", stdout);
  88. #endif
  89.  
  90.  
  91.     ios_base::sync_with_stdio(false);
  92.     cin.tie(NULL);
  93.     int tc = 1;
  94.     //cin >> tc;
  95.     for (int i = 1; i <= tc; i++){solve();}
  96.     return 0;
  97. }
  98.  
  99. /*
  100. */
  101.  
Advertisement
Add Comment
Please, Sign In to add comment