Nộp bài | Các bài nộp | Làm tốt nhất | Về danh sách bài |
P141SUMJ - ROUND 1J - Dãy tăng dài nhất |
Cho trước tập hợp các bộ 3 số. Bộ ba A (xA, yA, zA) được gọi là nhỏ hơn bộ ba B (xB, yB, zB) khi và chỉ khi xA < xB, yA < yB, zA < zB.
Nhiệm vụ của bạn hãy tìm một tập hợp sao cho sau khi sắp xếp lại các phần tử trong tập hợp này, ta sẽ thu được dãy các bộ ba tăng dần dài nhất có thể.
Input
Gồm nhiều bộ test.
Với mỗi bộ test, dòng đầu tiên gồm 4 số m, n, A, B. Mỗi test gồm có m+n bộ ba số.
m dòng tiếp theo, mỗi dòng gồm 3 số x_i, y_i, z_i (giá trị <= 10^6) miêu tả bộ ba thứ i.
n bộ ba số tiếp theo được thực hiện bằng chương trình như sau:
int a = A, b = B, C = ~(1<<31), M = (1<<16)-1;
int r() {
a = 36969 * (a & M) + (a >> 16);
b = 18000 * (b & M) + (b >> 16);
return (C & ((a << 16) + b)) % 1000000;
}
Thực hiện 3n lần chương trình trên, sẽ thu được các bộ ba tiếp theo x_j, y_j, z_j (m+1 <= j <= m+n).
Giới hạn: m + n <= 3.10^5, 1 <= A, B <= 2^16.
Input kết thúc bởi 4 số 0.
Output
Với mỗi test, in ra chiều dài của dãy bộ ba tăng dài nhất.
Example
Input: 6 0 1 1
0 0 0
0 2 2
1 1 1
2 0 2
2 2 0
2 2 2
5 0 1 1
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
10 0 1 1
3 0 0
2 1 0
2 0 1
1 2 0
1 1 1
1 0 2
0 3 0
0 2 1
0 1 2
0 0 3
0 10 1 1
0 0 0 0 Output: 3
5
1
3
Được gửi lên bởi: | adm |
Ngày: | 2014-06-23 |
Thời gian chạy: | 5s |
Giới hạn mã nguồn: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Ngôn ngữ cho phép: | ASM32-GCC ASM32 MAWK BC C CSHARP C++ 4.3.2 CPP CPP14 COFFEE LISP sbcl DART FORTH GO JAVA JS-RHINO JS-MONKEY KTLN OCT PAS-GPC PAS-FPC PERL PERL6 PROLOG PYTHON PYTHON3 PY_NBC R RACKET SQLITE SWIFT UNLAMBDA |