Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long h[50100][20], s[20], B=3137;
  5. int n;
  6. string a[50100];
  7.  
  8. long long f(int x, int y, int p)
  9. {
  10. long long t=0;
  11. if (x) t=h[p][x-1]*s[y];
  12. return h[p][x+y-1]-t;
  13. }
  14.  
  15. int sz=0, next[700000][27], val[700000];
  16.  
  17. void ubaci(string s)
  18. {
  19. int v=0;
  20. for (int i=0;i<(int)s.size();i++) {
  21. if (next[v][s[i]-'a']) v=next[v][s[i]-'a'];
  22. else {
  23. sz++;
  24. next[v][s[i]-'a']=sz;
  25. v=sz;
  26. }
  27. val[v]++;
  28. }
  29. return;
  30. }
  31.  
  32. int nadi(string s)
  33. {
  34. int v=0;
  35. for (int i=0;i<(int)s.size();i++) {
  36. if (!next[v][s[i]-'a']) return 0;
  37. v=next[v][s[i]-'a'];
  38. }
  39. return val[v];
  40. }
  41.  
  42. int main()
  43. {
  44. cin >> n;
  45. for (int i=0;i<n;i++) {
  46. cin >> a[i];
  47. h[i][0]=a[i][0];
  48. }
  49. s[0]=1;
  50. for (int i=1;i<20;i++) {
  51. s[i]=s[i-1]*B;
  52. }
  53. for (int i=0;i<n;i++) {
  54. for (int j=1;j<(int)a[i].size();j++) {
  55. h[i][j]=h[i][j-1]*B+a[i][j];
  56. }
  57. }
  58.  
  59. for (int i=0;i<n;i++) {
  60. ubaci(a[i]);
  61. }
  62.  
  63. long long rj=0;
  64.  
  65. for (int i=0;i<n;i++) {
  66. for (int j=0;j<(int)a[i].size();j++) {
  67. for (int k=0;k<j;k++) {
  68. if (f((int)a[i].size()-1-k,k+1,i)==f((int)a[i].size()-1-j,k+1,i)) goto izlaz;
  69. }
  70. rj+=nadi(a[i].substr((int)a[i].size()-1-j,j+1));
  71. if (f(0,j+1,i)==f((int)a[i].size()-1-j,j+1,i)) rj--;
  72. izlaz:;
  73. }
  74. }
  75.  
  76. cout << rj;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement