ABDELRHMAN_SAEED007

مسائلة قحبة

Oct 21st, 2025
1,238
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 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.  
  21. vector<ll>lcp(string& s)
  22. {
  23.     vector<ll>phi(s.size()+1,0);
  24.  
  25.     int n=s.size();
  26.     for (int i=1,k=0;i<n;i++)
  27.     {
  28.         k=phi[i-1];
  29.         while (k>0&&s[i]!=s[k])k=phi[k-1];
  30.         if (s[i]==s[k])k++;
  31.         phi[i]=k;
  32.     }
  33.     return phi;
  34. }
  35.  
  36. vector<int> z_function(string s) {
  37.     int n=s.size();
  38.     vector<int> z(n);
  39.     int l = 0, r = 0;
  40.     for(int i = 1; i < n; i++) {
  41.         if(i < r) {
  42.             z[i] = min(r - i, z[i - l]);
  43.         }
  44.         while(i + z[i] < n && s[z[i]] == s[i + z[i]]) {
  45.             z[i]++;
  46.         }
  47.         if(i+z[i]>r) {
  48.             l=i;
  49.             r=i+z[i];
  50.         }
  51.     }
  52.     return z;
  53. }
  54. void solve()
  55. {string a,b;
  56.     getline(cin,a);
  57.     getline(cin,b);
  58.     if (a.size()!=b.size())
  59.     {
  60.         cout<<-1<<" "<<-1<<"\n";
  61.         return;
  62.     }
  63.     string s=a;
  64.     reverse(all(s));
  65.     s+="#"+b;
  66.     auto lastj=lcp(s);
  67.     string s2=b+"#"+a;
  68.     auto z=z_function(s2);
  69.     // for (auto it:lastj)cout<<it<<" ";
  70.     // cout<<"\n";
  71.     // for (auto it:s)cout<<it<<" ";
  72.     // cout<<"\n----\n";
  73.     // for (auto it:z)cout<<it<<" ";
  74.     // cout<<"\n";
  75.     // for (auto it:s2)cout<<it<<" ";
  76.     int sz=a.size();
  77.     int n=s.size();
  78.     int st=-1,en=-1;
  79.     for (int i=0;i<sz-1;i++)
  80.     {
  81.  
  82.         ll p=lastj[2*sz-i-1];
  83.  
  84.         if (p&&z[sz+i+2]>=sz-i-p-1)st=i,en=sz-p;
  85.     }
  86.     cout<<st<<" "<<en<<'\n';
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94. }
  95. int32_t main() {
  96. #ifndef ONLINE_JUDGE
  97.     freopen("in.txt", "r", stdin);
  98.     freopen("out.txt", "w", stdout);
  99. #endif
  100.  
  101.     ios_base::sync_with_stdio(false);
  102.     cin.tie(NULL);
  103.  
  104.     int tc=1;
  105.     //cin>>tc;
  106.     for (int i=1;i<=tc;i++){solve();}
  107.     return 0;
  108. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment