tcbpg

Untitled

Nov 15th, 2011
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. //A
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <set>
  5. #include <map>
  6. #include <algorithm>
  7. #include <vector>
  8. #include <queue>
  9. #include <stack>
  10. #include <cstring>
  11. #include <cassert>
  12. #include <cmath>
  13.  
  14. #define forn(i,n) for(int i = 0; i < (int)(n);i++)
  15. #define forall(i,c) for(typeof((c).begin()) i = (c).begin(); i != (c).end();i++)
  16. #define forsn(i,s,n) for(int i = (int)(s); i < (int)(n);i++)
  17. #define all(v) (v).begin(),(v).end()
  18. #define isIn(i,c) ((c).find(i) != (c).end())
  19. #define SQR(x) ((x)*(x))
  20.  
  21. typedef long long tint;
  22.  
  23. using namespace std;
  24.  
  25. const int MAXL = 1000100;
  26. int pmp[MAXL];
  27.  
  28. void preMp(string& x){
  29.     int i=0, j = pmp[0] = -1;
  30.     while(i<(int)x.size()){
  31.         while(j>-1 && x[i] != x[j]) j = pmp[j];
  32.         pmp[++i] = ++j;
  33.     }
  34. }
  35.  
  36. string s;
  37. vector<int> prefs;
  38.  
  39. int main(){
  40.     #ifdef JUAMPI
  41.         freopen("PASSWORD.in","r",stdin);
  42.         freopen("PASSWORD.out","w",stderr);
  43.     #endif
  44.  
  45.     getline(cin,s);
  46.     preMp(s);
  47.  
  48.     int n = s.size();
  49.  
  50.     int k = pmp[n];
  51.     /*forn(i,n) cout << pmp[i+1] << " ";
  52.     cout << endl;
  53.     */
  54.     for(int i = pmp[n]; i >= 0; i--){
  55.         if(k == i){
  56.             prefs.push_back(i);
  57.             k = pmp[i];
  58.         }
  59.     }
  60.     prefs.pop_back();
  61.     /*
  62.     forn(i,prefs.size()){
  63.         cout << "ONE: " << endl;
  64.         forn(j, prefs[i])
  65.             cout << s[j] << " ";
  66.        
  67.         cout << endl;
  68.     }
  69.     */
  70.     sort(all(prefs));
  71.    
  72.     int l = -1, r = prefs.size();
  73.     while(r - l > 1){
  74.         int m = (l+r)/2;
  75.  
  76.         bool ok = false;
  77.         forsn(i,1,n-1) if(pmp[i+1] == prefs[m]) ok = true;
  78.         if(ok) l = m; else r = m;
  79.     }
  80. //  cout << l << " " << r << endl;
  81.    
  82.     if(l == -1) puts("Just a legend"); else{
  83.         forn(i,prefs[l]) putchar(s[i]);
  84.         putchar('\n');
  85.     }
  86.     return 0;
  87. }
  88.  
  89.  
Advertisement
Add Comment
Please, Sign In to add comment