제출 #844089

#제출 시각아이디문제언어결과실행 시간메모리
844089Darren0724Gift (IZhO18_nicegift)C++17
18 / 100
2054 ms266164 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define x first #define y second const int INF = 1e18; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, k; cin >> n >> k; set<pair<int, int>> m; int total = 0; set<int> ele; for (int i = 0; i < n; i++) { int p; cin >> p; total += p; m.insert({p, i + 1}); ele.insert(p); } if (total % k != 0) { cout << -1 << endl; return 0; } if (n == k) { if (ele.size() == 1) { cout << 1 << endl; cout << *ele.begin() << ' '; for (int i = 0; i < k; i++) { cout << i + 1 << ' '; } cout << endl; return 0; } else { cout << -1 << endl; return 0; } } vector<vector<int>> ans; while (m.size() > k + 1) { pair<int, int> d = *m.begin(); int mn = d.x; m.erase(m.begin()); vector<pair<int, int>> v; v.push_back(d); for (int i = 0; i < k - 1; i++) { v.push_back(*m.rbegin()); m.erase(--m.end()); mn = min(mn, v.back().first - 1); } mn = 1; vector<int> idx(k); for (int i = 0; i < k; i++) { idx[i] = v[i].y; v[i].x -= mn; } idx.push_back(mn); reverse(idx.begin(), idx.end()); ans.push_back(idx); for (int i = 0; i < k; i++) { if (v[i].x > 0) { m.insert(v[i]); } } } total = 0; for (auto p : m) { total += p.x; } int need = total / k; vector<pair<int, int>> tmp(m.begin(), m.end()); int sz = tmp.size(); for (int i = 0; i < sz; i++) { int d = need - tmp[i].x; if (d < 0) { cout << -1 << endl; return 0; } if (d == 0) { continue; } vector<int> idx; for (int j = 0; j < sz; j++) { if (i == j) continue; idx.push_back(tmp[j].second); } idx.push_back(d); reverse(idx.begin(), idx.end()); ans.push_back(idx); } cout << ans.size() << endl; for (auto &v : ans) { for (auto &j : v) { cout << j << ' '; } cout << endl; } return 0; }

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

nicegift.cpp: In function 'int32_t main()':
nicegift.cpp:41:21: warning: comparison of integer expressions of different signedness: 'std::set<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   41 |     while (m.size() > k + 1) {
      |            ~~~~~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...