蒟蒻结构体贪心10分求助

P1056 [NOIP2008 普及组] 排座椅

看不太懂…… 能解释一下吗? 我用的桶排序……
by 天野星河 @ 2022-11-20 16:14:01


@[天野星河](/user/564941) 这题值域只有几千,桶排序能过。 你这个代码我真的没看懂…… ```cpp #include<bits/stdc++.h> using namespace std; int m, n, k, l, d; int x[1005], y[1005]; int p[1005], q[1005]; int main() { scanf("%d%d%d%d%d", &m, &n, &k, &l, &d); for (int i = 1; i <= d; i++) { int xi, yi, pi, qi; scanf("%d%d%d%d", &xi, &yi, &pi, &qi); if (xi == pi) { x[min(yi, qi)]++; } else { y[min(xi, pi)]++; } } for (int i = 1; i <= k; i++) { int maxn = -1; int e; for (int j = 1; j < m; j++) { if (y[j] > maxn) { maxn = y[j]; e = j; } } y[e] = 0; p[e]++; } for (int i = 1; i <= l; i++) { int maxn = -1; int e; for (int j = 1; j < n; j++) { if (x[j] > maxn) { maxn = x[j]; e = j; } } x[e] = 0; q[e]++; } for (int i = 0; i < 1005; i++) { if (p[i]) { printf("%d ", i); } } printf("\n"); for (int i = 0; i < 1005; i++) { if (q[i]) { printf("%d ", i); } } } ```
by 天野星河 @ 2022-11-20 16:16:22


@[天野星河](/user/564941) 前面的差不多,后面我是用结构体排序,cnt表示线段数量,person表示能隔开的人的统计
by lwx20211103 @ 2022-11-20 21:01:19


输出和排序的问题 ```cpp #include<bits/stdc++.h> using namespace std; struct stu { int person, cnt; }; stu a[114514], b[114514]; bool compare1(stu x, stu y) { return x.person > y.person; } bool compare2(stu x, stu y) { return x.cnt < y.cnt; } int main() { int m, n, k, l, d; int i; cin >> m >> n >> k >> l >> d; for (i = 0; i < d; i++) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; if (x1 == x2) { a[min(y1, y2)].cnt = min(y1, y2); a[min(y1, y2)].person++; } else { b[min(x1, x2)].cnt = min(x1, x2); b[min(x1, x2)].person++; } } sort(a + 1, a + 10000, compare1); sort(b + 1, b + 10000, compare1); sort(a + 1, a + l + 1, compare2); sort(b + 1, b + k + 1, compare2); for (i = 1; i <= k; i++) { cout << b[i].cnt << " "; } cout << "\n"; for (i = 1; i <= l; i++) { cout << a[i].cnt << " "; } return 0; } ``` 这样就好了
by light_searcher @ 2022-11-27 09:09:56


|