제출 #511125

#제출 시각아이디문제언어결과실행 시간메모리
511125MazaalaiGift (IZhO18_nicegift)C++17
30 / 100
2066 ms164416 KiB
#include <bits/stdc++.h> #define pb push_back #define ff first #define ss second #define LLA(x) x.rbegin(),x.rend() #define print(x) for(auto el:x)cout<<el<<' ';cout<<"\n"; #define printPII(x) for(auto [a,b]:x)cout<<a<<","<<b<<' ';cout<<'\n'; using namespace std; using ll = long long; using PII = pair <ll, ll>; ll n, k, onePick = 1; bool impossible; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); cin >> n >> k; vector <vector <ll> > ans; set <PII> bfs; ll sum = 0, dbg = 0; for (int i = 1; i <= n; i++) { ll x; cin >> x; sum += x; bfs.insert({x, i}); } if (sum % k != 0) { cout << "-1\n"; return 0; } while(!impossible && sum > 0) { vector <ll> pick; vector <PII> add; for (int i = 0; i < k; i++) { auto it = --bfs.end(); PII cur = *it; bfs.erase(it); pick.pb(cur.ss); if (cur.ff < 0) { impossible = 1; break; } add.pb(cur); } ll mini = add[0].ff, And = add[0].ff; for (int i = 1; i < k; i++) { mini = min(mini, add[i].ff); And &= add[i].ff; } ll mxBit = 1; for (int i = 1; i < 60; i++) if (mini & (1ll<<i)) mxBit = i; mxBit = (1<<(mxBit-1)); if (And * k == sum) mxBit = And; pick.pb(mxBit); swap(pick[0], pick.back()); for (auto& [a, b] : add) { a -= mxBit; sum -= mxBit; bfs.insert({a, b}); } ans.pb(pick); // for (auto& [a, b] : bfs) { // cout << a << ',' << b << ' '; // } // cout << '\n'; // if (dbg++ == 30) break; } // int dbg = 0; if (impossible) { cout << "-1\n"; return 0; } cout << ans.size() << '\n'; for (auto el : ans) { print(el); } }

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

nicegift.cpp: In function 'int main()':
nicegift.cpp:22:14: warning: unused variable 'dbg' [-Wunused-variable]
   22 |  ll sum = 0, dbg = 0;
      |              ^~~
#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...