aboutsummaryrefslogtreecommitdiff
path: root/11_sliding_window_problems/sliding_window_sum_3220.cpp
diff options
context:
space:
mode:
Diffstat (limited to '11_sliding_window_problems/sliding_window_sum_3220.cpp')
-rw-r--r--11_sliding_window_problems/sliding_window_sum_3220.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/11_sliding_window_problems/sliding_window_sum_3220.cpp b/11_sliding_window_problems/sliding_window_sum_3220.cpp
new file mode 100644
index 0000000..9096b75
--- /dev/null
+++ b/11_sliding_window_problems/sliding_window_sum_3220.cpp
@@ -0,0 +1,25 @@
1#include <iostream>
2#include <vector>
3
4int main() {
5 size_t n, k;
6 long long x, a, b, c, sum{0}, sol{0};
7 std::cin >> n >> k >> x >> a >> b >> c;
8
9 std::vector<long long> v(k);
10 for (size_t i = 0; i < k; i++) {
11 sum += x;
12 v[i] = x;
13 x = (a*x + b) % c;
14 }
15
16 sol = sum;
17 for (size_t i = 0; i < n-k; i++) {
18 sum -= v[i%k];
19 v[i%k] = (a*v[(i-1+k)%k] + b) % c;
20 sum += v[i%k];
21 sol ^= sum;
22 }
23
24 std::cout << sol << "\n";
25}

Generated with cgit - Back to sebastiano.tronto.net