Advertisement
Guest User

Untitled

a guest
Dec 27th, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. #include<algorithm>
  5. using namespace std;
  6. int check[100000],b,maxus,maxn,a,m,n;
  7. string r[200000],otv,s,leks[10];
  8. bool flag;
  9. string lex(string a,string b){
  10. leks[0]=a;
  11. leks[1]=b;
  12. sort(leks,leks+2);
  13. return leks[0];
  14.  
  15.  
  16.  
  17. }
  18.  
  19.  
  20.  
  21. int prefix_function(string l, int b) {
  22. maxus=0;
  23.  
  24. for(int k=0;k<m;k++){
  25. int pi[500005]={};
  26.  
  27. if(k==b)
  28. continue;
  29. s=l+'#'+r[k];
  30. //cout<<" "<<s;
  31. int n = (int) s.length();
  32. for (int i=l.size(); i<n; ++i) {
  33. int j = pi[i-1];
  34. while (j > 0 && s[i] != s[j])
  35. j = pi[j-1];
  36. if (s[i] == s[j]){
  37. ++j;
  38. }
  39. pi[i] = j;
  40.  
  41. maxn=max(maxn,j);
  42. }
  43.  
  44. maxus=max(maxus,maxn);
  45. maxn=0;
  46. }
  47. return maxus;
  48. }
  49.  
  50.  
  51. int main(){
  52.  
  53. cin>>m;
  54. for(int i=0;i<m;i++)
  55. cin>>r[i];
  56.  
  57. for(int i=0;i<m;i++){
  58. b=i;
  59. otv=r[i];
  60.  
  61. for(int j=0;j<r[i].size();j++){
  62. s=r[i].substr(j,r[i].size()-j);
  63. //cout<<s<<" ";
  64. int a=prefix_function(s,b);
  65. if(j==0&&a==r[i].size()){
  66. cout<<"?"<<endl;
  67. flag=true;
  68. break;
  69. }
  70. if(a==r[i].size()-j)
  71. break;
  72. if(otv.size()==a+1)
  73. otv=lex(otv,r[i].substr(j,a+1));
  74. else
  75. if(a+1<otv.size())
  76. otv=r[i].substr(j,a+1);
  77. maxus=0;
  78. }
  79. if(flag==false)
  80. cout<<otv<<endl;
  81. flag=false;
  82. }
  83.  
  84. //
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement