Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- using namespace std;
- int a[10000 + 1];
- int dp[10000 + 1][5000 + 1 + 1];
- int main() {
- int n, m, k;
- scanf("%d %d %d", &n, &m, &k);
- for (int i = 0; i < n; i++) {
- scanf("%d", &a[i]);
- }
- for (int i = n; i <= 10000; i++) {
- a[i] = a[i % n];
- }
- for (int i = 10000; i >= 1; i--) {
- dp[i][m] = a[i - 1] != a[i];
- }
- for (int j = m - 1; j >= 0; j--) {
- dp[10000][j] = 1;
- }
- for (int j = m - 1; j >= 0; j--) {
- for (int i = 9999; i >= 0; i--) {
- int l = j + 1;
- int r = min(j + k, m);
- dp[i][j] = (
- a[i] != a[i + 1] ?
- dp[i + 1][l] - dp[i + 1][r + 1] != r - l + 1 :
- dp[i + 1][l] - dp[i + 1][r + 1] > 0
- ) + dp[i][j + 1];
- }
- }
- for (int i = 0; i < n; i++) {
- printf("%d ", dp[i][0] - dp[i][1] == 1 ? a[i] : a[i] ^ 1);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement