| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Google Code Jam 2021 - Append Sort | 26 | 1.0s | 1G |
| 2 | Google Code Jam 2021 - Hacked Exam | 39 | 1.0s | 1G |
| 3 | Google Code Jam 2021 - Prime Time | 35 | 1.0s | 1G |
Ta có một danh sách các số nguyên \(X_1,X_2,\ldots,X_N\). Ta muốn chúng theo thứ tự tăng nghiêm ngặt, nhưng không được phép đổi thứ tự các phần tử, nên các thuật toán sắp xếp thông thường không dùng được.
Lựa chọn duy nhất là thay đổi các số bằng cách nối các chữ số từ \(0\) đến \(9\) vào bên phải biểu diễn thập phân của chúng. Chẳng hạn, từ số \(10\), một thao tác có thể biến nó thành \(10\mathbf0\) hoặc \(10\mathbf9\); hai thao tác có thể biến nó thành \(10\mathbf{34}\), như hình dưới.
Cho danh sách hiện tại, cần ít nhất bao nhiêu thao tác nối một chữ số để danh sách trở thành tăng nghiêm ngặt? Ví dụ, với danh sách \(100,7,10\), ta có thể dùng tổng cộng \(4\) thao tác để tạo một danh sách đã sắp xếp như hình:
Dòng đầu chứa số bộ dữ liệu \(T\). Mỗi bộ được mô tả trên hai dòng. Dòng đầu chứa một số nguyên \(N\), là số phần tử của danh sách. Dòng thứ hai chứa \(N\) số nguyên \(X_1,X_2,\ldots,X_N\), là các phần tử theo đúng thứ tự đã cho.
Với mỗi bộ dữ liệu, in Case #x: y, trong đó \(x\) là số thứ tự bộ dữ liệu (bắt đầu từ \(1\)), còn \(y\) là số thao tác nối một chữ số ít nhất cần dùng để danh sách tăng nghiêm ngặt.
Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.
| Phân nhóm | Điểm Google Code Jam | Tỷ lệ điểm của bài |
|---|---|---|
| Test Set 1 | 12/26 | 46,15% |
| Test Set 2 | 14/26 | 53,85% |
Ví dụ 1
4
3
100 7 10
2
10 10
3
4 19 1
3
1 2 3
Case #1: 4
Case #2: 1
Case #3: 2
Case #4: 0
Google Code Jam 2021, Vòng 1A, bài Append Sort.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Một kỳ thi có \(Q\) câu đúng/sai; đáp án đúng mỗi câu là T hoặc F. Mỗi thí sinh chọn một trong hai cho từng câu, và điểm là số câu trả lời đúng.
Đã có \(N\) thí sinh làm bài. Bạn biết câu trả lời từng câu và điểm cuối của mỗi người. Giả sử mọi chuỗi đáp án đúng phù hợp với toàn bộ điểm của các thí sinh có xác suất bằng nhau, bạn muốn tối đa hóa điểm kỳ vọng của mình. Hãy xác định điểm kỳ vọng đó và cách trả lời để đạt được nó.
Dòng đầu chứa \(T\). Dòng đầu mỗi bộ chứa \(N,Q\). Mỗi trong \(N\) dòng tiếp theo chứa xâu \(A_i\) và số nguyên \(S_i\): câu trả lời và điểm của thí sinh \(i\). Ký tự thứ \(j\) của \(A_i\) là T hoặc F.
Với mỗi bộ, in Case #x: y z/w, trong đó \(y\) là một chuỗi đáp án đạt điểm kỳ vọng lớn nhất, còn \(z/w\) là điểm kỳ vọng cực đại dưới dạng phân số tối giản; \(w\) phải dương và nhỏ nhất có thể.
T hoặc F.Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.
| Phân nhóm | Điểm Google Code Jam | Tỷ lệ điểm của bài |
|---|---|---|
| Test Set 1 | 8/39 | 20,51% |
| Test Set 2 | 6/39 | 15,39% |
| Test Set 3 | 25/39 | 64,1% |
Ví dụ 1
4
1 3
FFT 3
1 3
FFT 2
2 6
FFTTTF 2
FTFTFT 4
2 2
FF 1
TT 1
Case #1: FFT 3/1
Case #2: FFT 2/1
Case #3: FTFFFT 4/1
Case #4: TF 1/1
FFT là \(3\), nên đáp án đúng buộc là FFT.FFF, FTT hoặc TFT, mỗi chuỗi xác suất \(1/3\). Trả FFT cho kỳ vọng \((2+2+2)/3=2\).FTFTFT.T, một câu F nhưng không biết thứ tự. TF/FT được \(2\) với xác suất \(1/2\), \(0\) với xác suất \(1/2\); FF/TT luôn được \(1\). Mọi chuỗi có cùng kỳ vọng nên in bất kỳ.Mẫu bổ sung Test Set 3 (không chạy trên lời giải nộp):
Input bổ sung:
1
3 120
FFTFFFTFFFTTTTTTTFTFFFFFFTTTFTFFFTFTFFTTFTFFTFFTTTFTFTFFTFTFTTFFFFTFTFFFFTTTFTTFTTTTFFFTTFFFFFTTFFTFFTFFTTTFFFFTTFFTFTTF 55
FFFTFFTTFFFFTFTFFTFFFTTTTTTFFFTTTFTTTTFFTFTTTFTTFFTTTFTFFFFTFFTTFFTTFTTFFTFTFFTFTTFTFTFFTTTFFTFTFTTFFTFTFTFTTFFTFFFTFTFT 62
FFFTFTTFFFFFTFTFTTTTTTFFTTFTFFFTFFTTTTTTFFFTTTFFFTTFTFFFFFFTFTTFFTFTTTFTTTTFTTFFFFTFFTTFTFFTTTTTTFTFFFFFTTFFTFTFTFFTTTTT 64
Output bổ sung:
Case #1: FFFTFTTTFFFFTFTFFTFTTTTTTTFFFFTTTFTTTTFFTFTTTTTFFFTFTFTFFFFTFFTTFTFTFTTTTTFFTFFFFFFFFTTFTTTTTTFTTTTFFFFTFTFTTFTFFFFTTTFT 189154508532118369075350624633/2901503505434414233388602018
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Kỳ vọng vượt \(65\), cao hơn điểm thật của mọi thí sinh. Cả tử và mẫu có thể lớn hơn \(2^{64}\); tử số ở đây vượt \(2^{97}\).
Google Code Jam 2021, Vòng 1A, bài Hacked Exam.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Bạn đang chơi một trò solitaire mới tên Prime Time. Bạn có một bộ bài, mỗi lá ghi một số nguyên tố; nhiều lá có thể ghi cùng số.
Mục tiêu là chia các lá thành hai nhóm sao cho tổng các số của nhóm thứ nhất bằng tích các số của nhóm thứ hai. Mỗi lá thuộc đúng một nhóm và mỗi nhóm phải có ít nhất một lá. Tổng hoặc tích của nhóm một lá chính là số trên lá đó.
Trong hình, nhóm trái có tổng \(25\), nhóm phải có tích \(25\), nên đây là cách chia hợp lệ. Điểm của bạn là tổng nhóm thứ nhất — cũng là tích nhóm thứ hai — hoặc bằng \(0\) nếu không thể chia. Hãy tìm điểm lớn nhất.
Dòng đầu chứa số bộ dữ liệu \(T\). Dòng đầu mỗi bộ chứa \(M\), số lượng số nguyên tố phân biệt. Mỗi trong \(M\) dòng tiếp theo chứa \(P_i,N_i\), nghĩa là có đúng \(N_i\) lá ghi số nguyên tố \(P_i\). Tổng số lá là \(\sum_iN_i\).
Với mỗi bộ dữ liệu, in Case #x: y, trong đó \(x\) là số thứ tự (bắt đầu từ \(1\)), còn \(y\) là điểm lớn nhất.
Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.
| Phân nhóm | Điểm Google Code Jam | Tỷ lệ điểm của bài |
|---|---|---|
| Test Set 1 | 7/35 | 20% |
| Test Set 2 | 13/35 | 37,14% |
| Test Set 3 | 15/35 | 42,86% |
Ví dụ 1
4
5
2 2
3 1
5 2
7 1
11 1
1
17 2
2
2 2
3 1
1
2 7
Case #1: 25
Case #2: 17
Case #3: 0
Case #4: 8
Ở mẫu #1, cách chia tối ưu là \(11+2+7+3+2=5\cdot5\). Cách \(5+7+3+2+5=11\cdot2\) cũng hợp lệ nhưng điểm thấp hơn. Ở mẫu #2, các lá cùng ghi một số vẫn có thể nằm ở hai nhóm khác nhau.
Google Code Jam 2021, Vòng 1A, bài Prime Time.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.