Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define fto(i, l, r) for (int i=l; i<=r; ++i)
- using namespace std;
- int n, test = 0, x[1000], y[1000], z[1000], h[1000];
- void _qsort(int l, int r) {
- if (l >= r) return;
- int i = l, j = r,
- mx = x[(l + r) / 2], my = y[(l + r) / 2], mz = z[(l + r) / 2];
- while (i <= j)
- {
- while (x[i] > mx || (x[i] == mx && y[i] > my) || (x[i] == mx && y[i] == my && z[i] > mz)) ++i;
- while (x[j] < mx || (x[j] == mx && y[j] < my) || (x[j] == mx && y[j] == my && z[j] < mz)) --j;
- if (i <= j)
- {
- swap(x[i], x[j]);
- swap(y[i], y[j]);
- swap(z[i], z[j]);
- ++i; --j;
- }
- }
- _qsort(i, r); _qsort(l, j);
- }
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("uva437.inp", "r", stdin);
- #endif // ONLINE_JUDGE
- while (scanf("%d", &n) && n)
- {
- ++test;
- fto (i, 0, n-1)
- {
- scanf("%d%d%d", &x[i], &y[i], &z[i]);
- if (x[i] > y[i]) swap(x[i], y[i]);
- x[n + i] = x[i]; y[n + i] = y[i]; z[n + i] = z[i];
- swap(x[n + i], z[n + i]);
- if (x[n + i] > y[n + 1]) swap(x[n + 1], y[n + 1]);
- x[2*n + i] = x[i]; y[2*n + i] = y[i]; z[2*n + i] = z[i];
- swap(y[2*n + i], z[2*n + i]);
- if (x[2*n + i] > y[2*n + i]) swap(x[2*n + i], y[2*n + i]);
- }
- _qsort(0, 3*n - 1);
- //fto(i, 0, 3*n - 1) cout << x[i] << " " << y[i] << " " << z[i] << endl;
- fto(i, 0, 3*n - 1) h[i] = z[i];
- fto(i, 0, 3*n - 1)
- fto(j, 0, i - 1)
- if ((x[i] < x[j] && y[i] < y[j]) ||
- (x[i] < y[j] && y[i] < x[j])) h[i] = max(h[i], h[j] + z[i]);
- int ans = 0;
- fto(i, 0, 3*n - 1) ans = max(ans, h[i]);
- printf("Case %d: maximum height = %d\n", test, ans);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment