제출 #500269

#제출 시각아이디문제언어결과실행 시간메모리
500269600MihneaJOIRIS (JOI16_joiris)C++17
30 / 100
2 ms332 KiB
#include <bits/stdc++.h> using namespace std; const int N = 57; int n; int k; int a[N]; vector<pair<int, int>> sol; void clr() { int mn = a[0]; for (int i = 1; i < n; i++) { mn = min(mn, a[i]); } for (int i = 0; i < n; i++) { a[i] -= mn; } } void op1(int x) { a[x] += k; clr(); sol.push_back({1, x}); } void op2(int x, int y) { assert(y == x + k - 1); for (int i = x; i <= y; i++) { a[i]++; } sol.push_back({2, x}); } bool isok() { vector<int> s(k, 0); for (int i = 0; i < n; i++) { s[i % k] += a[i]; } for (int i = 0; i <= n % k - 1; i++) { if (s[i] % k != s[0] % k) { return 0; } } for (int i = n % k; i < k; i++) { if (s[i] % k != s[k - 1] % k) { return 0; } } return 1; } int main() { //freopen ("input", "r", stdin); //freopen ("output", "w", stdout); cin >> n >> k; for (int i = 0; i < n; i++) { cin >> a[i]; } clr(); if (!isok()) { cout << "-1\n"; exit(0); } for (int i = k - 1; i + 1 < n; i++) { for (int j = 1; j < n; j++) { while (a[j - 1] > a[j]) { op1(j); } } /// want to make a[i] == a[i + 1] /// a[1] <= ... <= a[n] vector<int> guys; set<int> inGuys; if (i % k != k - 1) { for (int j = 0; j <= i % k; j++) { guys.push_back(j); inGuys.insert(j); } } for (auto &j : guys) { while (a[j] < a[i + 1]) { op1(j); } } int dif = a[i + 1] - a[i]; for (int step = 1; step <= dif; step++) { int last; for (int j = i; j - k + 1 >= 0; j -= k) { sol.push_back({2, j - k + 1}); last = j - k + 1; } } for (int j = i + 1; j < n; j++) { a[j] -= dif; } for (auto &j : guys) { a[j] -= dif; } assert(a[i] == a[i + 1]); } while (a[k - 1] > 0) { for (int i = 0; i <= k - 2; i++) { op1(i); } } for (int i = n % k; i < k; i++) { while (a[i] > 0) { for (int j = 0; j < n; j++) { while (a[j] < a[i]) { op1(j); } } } } cout << (int) sol.size() << "\n"; for (auto &it : sol) { cout << it.first << " " << it.second + 1 << "\n"; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

joiris.cpp: In function 'int main()':
joiris.cpp:88:11: warning: variable 'last' set but not used [-Wunused-but-set-variable]
   88 |       int last;
      |           ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...