제출 #172905

#제출 시각아이디문제언어결과실행 시간메모리
172905muhammad_hokimiyonGift (IZhO18_nicegift)C++14
7 / 100
2097 ms174836 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define fi first #define se second #define ll long long using namespace std; const int N = 3e6 + 7; const int M = 23; const int mod = 998244353; ll n,k; ll a[N]; set < pair < ll , ll > > s; void solve1() { cin >> n >> k; ll sum = 0; for( int i = 1; i <= n; i++ ){ cin >> a[i]; s.insert({a[i] , i}); sum += a[i]; } if( (--s.end())->fi * k > sum || sum % k != 0 ){ cout << -1; return; } int ans = 0; vector < ll > res; vector < vector < ll > > cnt(N); while( !s.empty() ){ int sz = 1; vector < pair < ll , ll > > y; while( sz <= k ){ auto x = *--s.end(); s.erase(--s.end()); y.push_back(x); sz++; } if( s.empty() ){ res.push_back(y[0].fi); ans++; for( auto x : y ){ cnt[ans].push_back(x.se); } break; } ll l = 1 , r = y[0].fi; while( l < r ){ ll m = (l + r) / 2; if( sum - (m + 1) * k >= max((--s.end())->fi , y[0].fi - (m + 1)) * k )l = m + 1; else r = m; } l = min(l , (--s.end())->se); sum -= l * k; res.push_back(l); ans++; for( auto x : y ){ cnt[ans].push_back(x.se); if( x.fi - l > 0 ){ x.fi -= l; s.insert(x); } } } cout << ans << "\n"; for( int i = 1; i <= ans; i++ ){ cout << res[i - 1] << " "; for( auto x : cnt[i] ){ cout << x << " "; } cout << "\n"; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen( "input.txt" , "r" , stdin ); //freopen( "output.txt" , "w" , stdout ); int cghf = 1;//cin >> cghf; while( cghf-- ){ solve1(); } }
#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...