Advertisement
Guest User

120 pts

a guest
Dec 16th, 2017
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int a[10000 + 1];
  7. int dp[10000 + 1][5000 + 1 + 1];
  8.  
  9. int main() {
  10.   int n, m, k;
  11.   scanf("%d %d %d", &n, &m, &k);
  12.   for (int i = 0; i < n; i++) {    
  13.     scanf("%d", &a[i]);
  14.   }
  15.   for (int i = n; i <= 10000; i++) {
  16.     a[i] = a[i % n];        
  17.   }
  18.   for (int i = 10000; i >= 1; i--) {
  19.     dp[i][m] = a[i - 1] != a[i];
  20.   }
  21.   for (int j = m - 1; j >= 0; j--) {
  22.     dp[10000][j] = 1;
  23.   }
  24.   for (int j = m - 1; j >= 0; j--) {
  25.     for (int i = 9999; i >= 0; i--) {
  26.       int l = j + 1;
  27.       int r = min(j + k, m);
  28.       dp[i][j] = (
  29.         a[i] != a[i + 1] ?
  30.         dp[i + 1][l] - dp[i + 1][r + 1] != r - l + 1 :
  31.         dp[i + 1][l] - dp[i + 1][r + 1] > 0
  32.       ) + dp[i][j + 1];                                    
  33.     }
  34.   }  
  35.   for (int i = 0; i < n; i++) {
  36.     printf("%d ", dp[i][0] - dp[i][1] == 1 ? a[i] : a[i] ^ 1);
  37.   }  
  38.   return 0;                      
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement