Advertisement
Guest User

Untitled

a guest
Aug 16th, 2020
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. using namespace std;
  5.  
  6. ll mod = 1e9 + 7;
  7.  
  8. int main()
  9. {
  10. ifstream inf("input.txt");
  11. ofstream ouf("output.txt");
  12. ll t,n,k,w,al,bl,cl,dl,ah,bh,ch,dh,ans,pre;
  13. inf >> t;
  14. for(ll tt=1;tt<=t;++tt)
  15. {
  16. //taking the inputs
  17. inf >> n >> k >> w;
  18. vector<ll> l(n+1),h(n+1);
  19. for (int i = 1; i <= k; ++i)
  20. inf >> l[i];
  21. inf >> al >> bl >> cl >> dl;
  22. for (int i = 1; i <= k; ++i)
  23. inf >> h[i];
  24. inf >> ah >> bh >> ch >> dh;
  25. for (int i = k + 1; i <= n; ++i)
  26. {
  27. l[i] = ((al * l[i - 2] + bl * l[i - 1] + cl) % dl) + 1;
  28. h[i] = ((ah * h[i - 2] + bh * h[i - 1] + ch) % dh) + 1;
  29. }
  30. //calculating first perimeter
  31. pre = 2 * (w + h[1]);
  32. ans = pre;
  33. //taking the last w steps
  34. vector<ll> previous(w + 1, h[1]);
  35. //updating the pre
  36. ouf << pre << endl;
  37. for (int i = 2; i <= n; ++i)
  38. {
  39. //condition for no overlapping
  40. if (l[i - 1] + w < l[i])
  41. {
  42. pre += 2 * (w + h[i]);
  43. for (int j = 0; j <= w; ++j)
  44. previous[j] = h[i];
  45. }
  46. //condition for just touch
  47. else if (l[i - 1] + w == l[i])
  48. {
  49. if (h[i] > h[i - 1])
  50. pre += 2*(h[i] - h[i - 1]);
  51. pre += 2 * w;
  52. previous[0] = max(previous[0], h[i]);
  53. for (int j = 1; j <= w; ++j)
  54. previous[j] = h[i];
  55. }
  56. //for overlapping
  57. else
  58. {
  59. //calculated sum
  60. pre +=2*( l[i] - l[i - 1]);
  61. for (int j = 1; j<= w; ++j)
  62. pre -= abs(previous[j] - previous[j - 1]);
  63. pre -= previous[w];
  64. for (ll j = l[i] - l[i - 1]; j <= w; ++j)
  65. previous[j] = max(previous[j], h[i]);
  66. for (ll j = 1; j <= w; ++j)
  67. pre += abs(previous[j] - previous[j - 1]);
  68. pre += abs(previous[w] - h[i]);
  69. pre += h[i];
  70. //update previous
  71. int j;
  72. for ( j = 0; j < (w+1)-(l[i] - l[i - 1]); ++j)
  73. {
  74. previous[j] = previous[j+l[i]-l[i-1]];
  75. }
  76. for (; j <= w; ++j)
  77. previous[j] = h[i];
  78. }
  79. ouf << pre << endl;
  80. ans = (ans*pre)%mod;
  81. }
  82. ouf << "Case #" << tt << ": " << ans << endl;
  83. }
  84. inf.close();
  85. ouf.close();
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement