WA

Lee  •  16小时前


include <bits/stdc++.h>

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;

}


评论:

请先登录,才能进行评论