Lee • 16小时前
using namespace std;
struct li {
int q, w;
} a[501];
bool cmp(li o, li p) {
return o.q < p.q;
} int b[501]; bool dp[501][5001]; int dp2[501][5001]; vector
c; vectorc2;int main() {
int t;
cin >> t;
while (t--) {
int n, m, k;
cin >> n >> m >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i].q;
a[i].w = i;
}
sort(a + 1, a + n + 1, cmp);
if (m >= n - 1) {
int maxn = a[n].q;
for (int i = 1; i < n; i++) {
if (a[i].q < k) {
cout << a[i].w << " " << a[i].q << " " << a[n].w << " " << maxn - (k - a[i].q) << endl;
maxn -= (k - a[i].q);
} else if (a[i].q == k) {
cout << a[i].w << " " << a[i].q << endl;
} else {
cout << a[i].w << " " << k << endl;
a[i].q -= k;
i--;
}
}
while (maxn >= k) {
cout << a[n].w << " " << k << endl;
maxn -= k;
}
} else {
for (int i = 1; i <= n; i++) {
b[i] = k - a[i].q;
}
dp[0][0] = true;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= k; j++) {
if (j >= b[i]) {
if (dp[i - 1][j - b[i]]) {
dp[i][j] = true;
dp2[i][j] = j - b[i];
}
}
if (dp[i - 1][j]) {
dp[i][j] = true;
dp2[i][j] = j;
}
}
}
if (!dp[n][k]) {
cout << "-1" << endl;
} else {
int i = n, j = k;
while (i >= 1) {
if (dp2[i][j] != j) {
c.push_back({a[i].q, a[i].w});
} else {
c2.push_back({a[i].q, a[i].w});
}
j = dp2[i][j];
i--;
}
int ma = c[0].q;
for (int i = 1; i < c.size(); i++) {
if (c[i].q < k) {
cout << c[i].w << " " << c[i].q << " " << c[0].w << " " << ma - (k - c[i].q) << endl;
ma -= (k - c[i].q);
} else if (c[i].q == k) {
cout << c[i].w << " " << c[i].q << endl;
} else {
cout << c[i].w << " " << k << endl;
c[i].q -= k;
i--;
}
}
int maa = c2[0].q;
for (int i = 1; i < c2.size(); i++) {
if (c2[i].q < k) {
cout << c2[i].w << " " << c2[i].q << " " << c2[0].w << " " << maa - (k - c2[i].q) << endl;
maa -= (k - c2[i].q);
} else if (c2[i].q == k) {
cout << c2[i].w << " " << c2[i].q << endl;
} else {
cout << c2[i].w << " " << k << endl;
c2[i].q -= k;
i--;
}
}
}
c.clear();
c2.clear();
memset(dp, 0, sizeof dp);
memset(dp2, 0, sizeof dp2);
}
}
return 0;
}
评论:
请先登录,才能进行评论