Rkhamim

Untitled

Apr 12th, 2021
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define M1 1000000007
  4. #define M 2038074743
  5. long long int a[100005],d[100005],dp[100005];
  6. int main()
  7. {
  8. ios_base::sync_with_stdio(false);
  9. cin.tie(NULL);
  10. long long int n,m,x=0,y=0,z,k=0,i,j=0,l,ans=0,q=1,r=1,t,ca;
  11. cin>>t;
  12. ca=t;
  13. while(t--)
  14. {
  15. unordered_map< int,int>ma;
  16. vector<int>v;
  17. cin>>n;
  18. string s,p;
  19. for(i=0;i<n;i++)
  20. {
  21. cin>>p;
  22. y=p.size();
  23. v.push_back(y);
  24. x=0,y=0;
  25. for(j=0;j<p.size();j++)
  26. {
  27. x=(x*401+p[j])%M;
  28. //y=(y*409+p[j])%M1;
  29. }
  30. ma[x]=1;
  31. }
  32. cin>>s;
  33. m=s.size();
  34. x=0,y=0;
  35. for(i=0;i<m;i++)
  36. {
  37. dp[i]=1e7;
  38. x=(x*401+s[i])%M;
  39. //y=(y*409+s[i])%M1;
  40. // e[i]=y;
  41. a[i]=x;
  42. if(i==0)d[i]=1;
  43. else d[i]=(d[i-1]*401)%M;
  44. }
  45. dp[m]=1e7;
  46. auto ip = std::unique(v.begin(), v.end());
  47. v.resize(std::distance(v.begin(), ip));
  48. sort(v.begin(),v.end());
  49. dp[0]=0;
  50. for(i=0;i<m;i++)
  51. {
  52. for(j=0;j<v.size();j++)
  53. {
  54. z=v[j];
  55. // cout<<z<<" "<<i<<endl;
  56. if(i+z>m)break;
  57. if(i==0)
  58. {
  59. x=a[z-1];
  60. // y=e[z-1];
  61. }
  62. else
  63. {
  64. x=(a[i+z-1]-a[i-1]*d[z])%M;
  65. x=(x+M)%M;
  66. //y=(e[i+z-1]-e[i-1]*f[z])%M1;
  67. // y=(y+M1)%M1;
  68. }
  69. if(ma[x])
  70. {
  71. dp[i+z]=min(dp[i+z],dp[i]+1);
  72. }
  73. // cout<<x<<" "<<y<<" "<<i<<endl;
  74.  
  75. }
  76. }
  77. //cout<<dp[0]<<" "<<dp[1]<<" "<<dp[2]<<" "<<dp[3]<<endl;
  78. cout<<"Case "<<ca-t<<": ";
  79. if(dp[m]==1e7)cout<<"impossible"<<endl;
  80. else cout<<dp[m]<<endl;
  81.  
  82. }
  83. return 0;
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment