Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- ll mod = 1e9 + 7;
- int main()
- {
- ifstream inf("input.txt");
- ofstream ouf("output.txt");
- ll t,n,k,w,al,bl,cl,dl,ah,bh,ch,dh,ans,pre;
- inf >> t;
- for(ll tt=1;tt<=t;++tt)
- {
- //taking the inputs
- inf >> n >> k >> w;
- vector<ll> l(n+1),h(n+1);
- for (int i = 1; i <= k; ++i)
- inf >> l[i];
- inf >> al >> bl >> cl >> dl;
- for (int i = 1; i <= k; ++i)
- inf >> h[i];
- inf >> ah >> bh >> ch >> dh;
- for (int i = k + 1; i <= n; ++i)
- {
- l[i] = ((al * l[i - 2] + bl * l[i - 1] + cl) % dl) + 1;
- h[i] = ((ah * h[i - 2] + bh * h[i - 1] + ch) % dh) + 1;
- }
- //calculating first perimeter
- pre = 2 * (w + h[1]);
- ans = pre;
- //taking the last w steps
- vector<ll> previous(w + 1, h[1]);
- //updating the pre
- ouf << pre << endl;
- for (int i = 2; i <= n; ++i)
- {
- //condition for no overlapping
- if (l[i - 1] + w < l[i])
- {
- pre += 2 * (w + h[i]);
- for (int j = 0; j <= w; ++j)
- previous[j] = h[i];
- }
- //condition for just touch
- else if (l[i - 1] + w == l[i])
- {
- if (h[i] > h[i - 1])
- pre += 2*(h[i] - h[i - 1]);
- pre += 2 * w;
- previous[0] = max(previous[0], h[i]);
- for (int j = 1; j <= w; ++j)
- previous[j] = h[i];
- }
- //for overlapping
- else
- {
- //calculated sum
- pre +=2*( l[i] - l[i - 1]);
- for (int j = 1; j<= w; ++j)
- pre -= abs(previous[j] - previous[j - 1]);
- pre -= previous[w];
- for (ll j = l[i] - l[i - 1]; j <= w; ++j)
- previous[j] = max(previous[j], h[i]);
- for (ll j = 1; j <= w; ++j)
- pre += abs(previous[j] - previous[j - 1]);
- pre += abs(previous[w] - h[i]);
- pre += h[i];
- //update previous
- int j;
- for ( j = 0; j < (w+1)-(l[i] - l[i - 1]); ++j)
- {
- previous[j] = previous[j+l[i]-l[i-1]];
- }
- for (; j <= w; ++j)
- previous[j] = h[i];
- }
- ouf << pre << endl;
- ans = (ans*pre)%mod;
- }
- ouf << "Case #" << tt << ": " << ans << endl;
- }
- inf.close();
- ouf.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement