Advertisement
a53

birot

a53
Feb 6th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. #include<fstream>
  2. using namespace std;
  3. ifstream fin("birot.in");
  4. ofstream fout("birot.out");
  5. int best1[2][130],best2[2][130];
  6. char s1[102], s2[102], t[100003];
  7. int q1[130], q2[130];
  8. int p1,p2,infinit=100000000;
  9. int m, n;
  10.  
  11. int e(int i, int j)
  12. {
  13. int d1,d2;
  14. if(i<j)
  15. {
  16. d1=j-i;
  17. d2=m-d1;
  18. }
  19. else
  20. {
  21. d1=i-j;
  22. d2=m-d1;
  23. }
  24. return (d1<d2)?d1:d2;
  25. }
  26.  
  27. int main()
  28. {
  29. int i,p1,p2,x1,x2,y1,y2,valmin,k1,k2,k,r1,r2,v;
  30. fin.get(s1+1,101,'\n');
  31. fin.get();
  32. fin.get(s2+1,101,'\n');
  33. fin.get();
  34. fin.get(t+1,100001,'\n');
  35. fin.get();
  36. m=1;while(s1[m]!=0){
  37. q1[(int)s1[m]]=m;
  38. q2[(int)s2[m]]=m;
  39. m++;
  40. }
  41. m--;
  42. n=1;while(t[n]!=0)n++;
  43. n--;
  44. //best1[k][i]=costul optim de a obtine t[k] cu rotita1 si cealalta rotita la pozitia i
  45. //best2[k][i]=costul optim de a obtine t[k] cu rotita2 si cealalta rotita la pozitia i
  46. for(i=1;i<=m;i++){
  47. best1[1][i]=infinit;
  48. best2[1][i]=infinit;
  49. }
  50. p1=1;
  51. p2=1;
  52. r1=q1[(int)t[1]];
  53. r2=q2[(int)t[1]];
  54. x1=e(p1,r1);
  55. x2=e(p2,r2);
  56. best1[1][p2]=x1;
  57. best2[1][p1]=x2;
  58. for(k=2;k<=n;k++){
  59. //initializez bn cu zero
  60. k2=k%2;
  61. k1=1-k2;
  62. for(i=1;i<=m;i++){
  63. best1[k2][i]=infinit;
  64. best2[k2][i]=infinit;
  65. }
  66.  
  67. r1=q1[(int)t[k]];
  68. r2=q2[(int)t[k]];
  69. p1=q1[(int)t[k-1]];
  70. p2=q2[(int)t[k-1]];
  71. x1=e(p1,r1);
  72. y2=e(p2,r2);
  73. for(i=1;i<=m;i++){
  74. v=best1[k1][i];
  75. if(v<infinit)
  76. { ///sunt cu rotita2 la pozitia i si cu rotita1 la pozitia p1
  77. x2=e(i,r2);
  78. if(v+x1<best1[k2][i]){
  79. best1[k2][i]=v+x1;
  80. }
  81. if(v+x2<best2[k2][p1])
  82. {
  83. best2[k2][p1]=v+x2;
  84. }
  85. }
  86. v=best2[k1][i];
  87. if(v<infinit)
  88. {
  89. ///sunt cu rotita1 la pozitia i si cu rotita2 la pozitia p2
  90. y1=e(i,r1);
  91. if(v+y1<best1[k2][p2])
  92. {
  93. best1[k2][p2]=v+y1;
  94. }
  95. if(v+y2<best2[k2][i])
  96. {
  97. best2[k2][i]=v+y2;
  98. }
  99. }
  100. }
  101. }
  102. k2=n%2;
  103. valmin=infinit;
  104. for(i=1;i<=m;i++)
  105. {
  106. if(best1[k2][i]<valmin)
  107. {
  108. valmin=best1[k2][i];
  109. }
  110. if(best2[k2][i]<valmin)
  111. {
  112. valmin=best2[k2][i];
  113. }
  114. }
  115. fout<<valmin<<'\n';
  116. fout.close();
  117. fin.close();
  118. return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement