Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<algorithm>
- using namespace std;
- int main() {
- long long n,k;
- cin >> n >> k;
- if (n==0) return 0;
- vector<int> v;
- for (int i = 1; i <= n; ++i) {
- int a;
- cin >> a;
- v.push_back(a);
- }
- vector<int> original = v;
- sort(v.begin(), v.end());
- long long sum = 0;
- int index;
- for (index = 0; index < v.size(); ++index)
- sum += v[index];
- if (sum < k) {
- cout << -1 << endl;
- return 0;
- }
- if(!v.size() || sum == k){ cout << endl; return 0; }
- sum = 0;
- for (index = 0; index < v.size(); ++index) {
- long long delta = index > 0 ? v[index] - v[index-1] : v[index];
- delta *= v.size() - index;
- if (delta + sum > k) break;
- else sum += delta;
- }
- int i;
- k -= sum;
- int passes = index> 0?v[index-1]:0;
- passes += k / (n-index);
- k %= (n-index);
- int last = v.size() - 1;
- for (i=0; i<original.size(); ++i)
- {
- original[i] -= passes;
- if (original[i]>0 && k > 0) {
- original[i] --;
- k--;
- last = i;
- }
- }
- bool printed = false;
- for (i = last+1; i < v.size(); ++i) {
- if (original[i] > 0) {
- if (printed) cout<< " ";
- cout << (i+1);
- printed = true;
- }
- }
- for (i = 0; i <= last; ++i) {
- if (original[i] > 0) {
- if (printed) cout<< " ";
- cout << (i+1);
- printed = true;
- }
- }
- cout << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment