#include <stdio.h>
#include <vector>
#include <algorithm>
#include <utility>
#include <map>
using namespace std;
int main() {
int n, m;
scanf("%d %d", &n, &m);
vector<int> aa(n), z(n);
for (int i = 0; i < n; i++) {
scanf("%d", &aa[i]);
}
z[n-1] = m;
for (int i = n-2; i >= 0; i--) {
vector<pair<int, int>> g;
for (int j = i+1; j < n; j++) {
if (z[j] == -1) g.push_back(make_pair(0, -j));
else g.push_back(make_pair(z[j] + aa[j], -j));
}
sort(g.begin(), g.end());
int b = m;
for (int j = 0; j < (n-i-1)/2; j++)
b -= g[j].first;
if (b < 0) {
z[i] = -1;
} else {
z[i] = b;
for (int j = i+1; j < n; j++)
z[j] = 0;
for (int j = 0; j < (n-i-1)/2; j++)
z[-g[j].second] = g[j].first;
}
}
for (int i = 0; i < n; i++) printf("%d ", z[i]);
printf("\n");
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <stdio.h> #include <vector> #include <algorithm> #include <utility> #include <map> using namespace std; int main() { int n, m; scanf("%d %d", &n, &m); vector<int> aa(n), z(n); for (int i = 0; i < n; i++) { scanf("%d", &aa[i]); } z[n-1] = m; for (int i = n-2; i >= 0; i--) { vector<pair<int, int>> g; for (int j = i+1; j < n; j++) { if (z[j] == -1) g.push_back(make_pair(0, -j)); else g.push_back(make_pair(z[j] + aa[j], -j)); } sort(g.begin(), g.end()); int b = m; for (int j = 0; j < (n-i-1)/2; j++) b -= g[j].first; if (b < 0) { z[i] = -1; } else { z[i] = b; for (int j = i+1; j < n; j++) z[j] = 0; for (int j = 0; j < (n-i-1)/2; j++) z[-g[j].second] = g[j].first; } } for (int i = 0; i < n; i++) printf("%d ", z[i]); printf("\n"); return 0; } |
English