aboutsummaryrefslogtreecommitdiff
path: root/11_sliding_window_problems/sliding_window_xor_3426.cpp
blob: 0f21ce3dd11f00b69d3bb2d7a2783c9ed67fdfaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <algorithm>
#include <deque>
#include <iostream>
#include <vector>

int main() {
	long long n, k, x, a, b, c, m{0};
	std::cin >> n >> k >> x >> a >> b >> c;

	std::vector<long long> v(k);
	for (long long i = 0; i < k; i++) {
		v[i] = x;
		m ^= x;
		x = (a*x + b) % c;
	}

	long long sol{m};
	for (long long i = 0; i < n-k; i++) {
		m ^= v[i%k];
		v[i%k] = (a*v[(i-1+k)%k] + b) % c;
		m ^= v[i%k];
		sol ^= m;
	}

	std::cout << sol << "\n";
}

Generated with cgit - Back to sebastiano.tronto.net