답안 #609549

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
609549 2022-07-27T17:08:11 Z piOOE JOIRIS (JOI16_joiris) C++17
100 / 100
1 ms 340 KB
#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, k;
  cin >> n >> k;
  vector<int> a(n), b(k);
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    b[i % k] += a[i];
  }

  for (int i = 0; i < k; ++i) {
    b[i] %= k;
  }

  const int ost = n % k;

  for (int i = 0; i < ost - 1; ++i) {
    if (b[i] != b[i + 1]) {
      cout << -1;
      return 0;
    }
  }

  for (int i = ost; i < k - 1; ++i) {
    if (b[i] != b[i + 1]) {
      cout << -1;
      return 0;
    }
  }

  vector<pair<int, int>> ans;

  auto vertical = [&](int i) {
    assert(i >= 0 && i < n);
    a[i] += k;
    ans.emplace_back(1, i + 1);
  };

  auto horizontal = [&](int i) {
    assert(i >= 0 && i + k <= n);
    for (int j = i; j < i + k; ++j) {
      a[j] += 1;
    }
    ans.emplace_back(2, i + 1);
  };

  auto clear = [&] {
    int mn = *min_element(a.begin(), a.end());
    for (int &i: a) {
      i -= mn;
    }
  };

  auto normalize = [&] {
    clear();
    int mx = *max_element(a.begin(), a.end());
    for (int i = 0; i < n; ++i) {
      while (a[i] < mx) {
        vertical(i);
      }
    }
    clear();
    assert(*max_element(a.begin(), a.end()) < k);
  };


  normalize();

  for (int i = 1; i < n; ++i) {
    while (a[i] < a[i - 1]) {
      vertical(i);
    }
  }

  assert(is_sorted(a.begin(), a.end()));

  int need = a[n - 1];

  for (int x = 1; x <= need; ++x) {
    for (int i = n - 1; i - k >= -1;) {
      if (a[i] < x) {
        horizontal(i - k + 1);
        i -= k;
      } else {
        i -= 1;
      }
    }
  }

  for (int i = k - 1; i < n - 1; ++i) {
    assert(a[i] == a[i + 1]);
  }

  need = a[n - 1];
  for (int i = 0; i < k - 1; ++i) {
    while (a[i] < need) {
      vertical(i);
    }
  }

  clear();

  for (int i = k - 1; i < n; ++i) {
    assert(a[i] == 0);
  }


  int mx = *max_element(a.begin() + ost, a.end());

  for (int i = ost; i < n; ++i) {
    assert(a[i] % k == 0);
    while (a[i] < mx) {
      vertical(i);
    }
  }

  for (int i = 0; i < ost; ++i) {
    while (a[i] < mx) {
      vertical(i);
    }
  }

  clear();

  if (ost > 0) {
    mx = *max_element(a.begin(), a.end());
    for (int i = 0; i < ost; ++i) {
      assert((mx - a[i]) % k == 0);
      while (a[i] < mx) {
        vertical(i);
      }
    }
    int i = ost;
    for (; i < n; i += k) {
      while (a[i] < mx) {
        horizontal(i);
      }
    }
    assert(i == n);
    clear();
  }

  for (int i = 0; i < n; ++i) {
    assert(a[i] == 0);
  }

  cout << (int)ans.size() << '\n';
  for (auto [tp, i] : ans) {
    cout << tp << " " << i << '\n';
  }

  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 320 KB Output is correct
8 Correct 1 ms 316 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 320 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 324 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 320 KB Output is correct
8 Correct 1 ms 316 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 320 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 256 KB Output is correct
17 Correct 1 ms 324 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 340 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 320 KB Output is correct
23 Correct 1 ms 340 KB Output is correct
24 Correct 1 ms 212 KB Output is correct
25 Correct 1 ms 340 KB Output is correct
26 Correct 0 ms 212 KB Output is correct
27 Correct 1 ms 340 KB Output is correct
28 Correct 0 ms 212 KB Output is correct
29 Correct 1 ms 340 KB Output is correct
30 Correct 1 ms 328 KB Output is correct
31 Correct 1 ms 212 KB Output is correct
32 Correct 1 ms 316 KB Output is correct
33 Correct 1 ms 324 KB Output is correct
34 Correct 1 ms 212 KB Output is correct
35 Correct 0 ms 212 KB Output is correct
36 Correct 1 ms 212 KB Output is correct
37 Correct 1 ms 212 KB Output is correct
38 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 320 KB Output is correct
8 Correct 1 ms 316 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 320 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 256 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 1 ms 340 KB Output is correct
22 Correct 1 ms 340 KB Output is correct
23 Correct 1 ms 212 KB Output is correct
24 Correct 1 ms 324 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 0 ms 212 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Correct 1 ms 212 KB Output is correct
29 Correct 0 ms 212 KB Output is correct
30 Correct 0 ms 212 KB Output is correct
31 Correct 1 ms 212 KB Output is correct
32 Correct 1 ms 212 KB Output is correct
33 Correct 1 ms 324 KB Output is correct
34 Correct 1 ms 212 KB Output is correct
35 Correct 1 ms 340 KB Output is correct
36 Correct 1 ms 212 KB Output is correct
37 Correct 1 ms 212 KB Output is correct
38 Correct 1 ms 320 KB Output is correct
39 Correct 1 ms 340 KB Output is correct
40 Correct 1 ms 212 KB Output is correct
41 Correct 1 ms 340 KB Output is correct
42 Correct 0 ms 212 KB Output is correct
43 Correct 1 ms 340 KB Output is correct
44 Correct 0 ms 212 KB Output is correct
45 Correct 1 ms 340 KB Output is correct
46 Correct 1 ms 328 KB Output is correct
47 Correct 1 ms 212 KB Output is correct
48 Correct 1 ms 316 KB Output is correct
49 Correct 1 ms 324 KB Output is correct
50 Correct 1 ms 212 KB Output is correct
51 Correct 0 ms 212 KB Output is correct
52 Correct 1 ms 212 KB Output is correct
53 Correct 1 ms 212 KB Output is correct
54 Correct 1 ms 212 KB Output is correct
55 Correct 1 ms 316 KB Output is correct
56 Correct 1 ms 212 KB Output is correct
57 Correct 0 ms 212 KB Output is correct
58 Correct 1 ms 316 KB Output is correct
59 Correct 0 ms 320 KB Output is correct
60 Correct 1 ms 212 KB Output is correct
61 Correct 1 ms 212 KB Output is correct
62 Correct 0 ms 212 KB Output is correct
63 Correct 0 ms 212 KB Output is correct
64 Correct 1 ms 212 KB Output is correct
65 Correct 1 ms 216 KB Output is correct
66 Correct 0 ms 212 KB Output is correct
67 Correct 0 ms 212 KB Output is correct
68 Correct 1 ms 320 KB Output is correct
69 Correct 1 ms 340 KB Output is correct
70 Correct 1 ms 340 KB Output is correct
71 Correct 1 ms 340 KB Output is correct
72 Correct 1 ms 324 KB Output is correct
73 Correct 1 ms 340 KB Output is correct
74 Correct 1 ms 340 KB Output is correct
75 Correct 1 ms 340 KB Output is correct
76 Correct 1 ms 320 KB Output is correct
77 Correct 1 ms 212 KB Output is correct
78 Correct 0 ms 212 KB Output is correct
79 Correct 1 ms 212 KB Output is correct
80 Correct 1 ms 212 KB Output is correct
81 Correct 1 ms 316 KB Output is correct
82 Correct 1 ms 212 KB Output is correct
83 Correct 1 ms 340 KB Output is correct
84 Correct 1 ms 312 KB Output is correct
85 Correct 1 ms 320 KB Output is correct
86 Correct 1 ms 212 KB Output is correct
87 Correct 1 ms 212 KB Output is correct
88 Correct 1 ms 212 KB Output is correct
89 Correct 0 ms 212 KB Output is correct
90 Correct 1 ms 212 KB Output is correct
91 Correct 0 ms 212 KB Output is correct
92 Correct 1 ms 340 KB Output is correct