fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector<int>v;
  4. int l,r,i,j,k,n,m,z[1000005];
  5. int main()
  6. {
  7. string a,b;
  8. cin>>a;
  9. //b.append("arpitabcabcdabc");
  10. //a.append(b);
  11. //a.append(b);
  12. //a.append("j");
  13. //a.append(b);
  14. //for(i=1;i<=100000;i++)
  15. //{
  16. // a.append("a");
  17. //}
  18. //cout<<a<<endl<<endl;
  19. k=a.size();
  20. l=0;
  21. r=0;
  22. z[0]=0;
  23. for(i=1;i<k;i++)
  24. {
  25. if(i>r)
  26. {
  27. l=i;
  28. r=i;
  29. while(r<k && (a[r-l]==a[r]))
  30. r++;
  31. z[i]=r-l;
  32. r--;
  33. }
  34. else
  35. {
  36. j=i-l;
  37. if(z[j]<(r-i+1))
  38. z[i]=z[j];
  39. else
  40. {
  41. l=i;
  42. while(r<k &&(a[r-l]==a[r]))
  43. r++;
  44. z[i]=r-l;
  45. r--;
  46. }
  47. }
  48. }
  49. int maxu=0,cnt=0,p=0;
  50. for(i=0;i<k;i++)
  51. {
  52. if(z[i]>maxu)
  53. {
  54. maxu=z[i];
  55. p=i;
  56. }
  57. }
  58. for(i=0;i<k;i++)
  59. {
  60. cout<<z[i]<" ";
  61. if(maxu==z[i])
  62. cnt++;
  63. }
  64. cout<<endl;
  65. if(cnt>1 && maxu>0)
  66. cout<<"YES"<<endl<<p;
  67. else
  68. cout<<"NO";
  69. return 0;
  70. }
Success #stdin #stdout 0s 7180KB
stdin
abcabcdabc
stdout
0003000300
YES
3