| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Google Code Jam 2020 - Pascal Walk | 35 | 1.0s | 1G |
| 2 | Google Code Jam 2020 - Pattern Matching | 28 | 1.0s | 1G |
| 3 | Google Code Jam 2020 - Square Dance | 37 | 1.0s | 1G |
Tam giác Pascal gồm vô hạn hàng, mỗi hàng chứa số lượng số nguyên tăng dần, được sắp xếp thành hình tam giác.
Ta ký hiệu \((r, k)\) là vị trí thứ \(k\) tính từ trái sang trong hàng thứ \(r\), trong đó cả \(r\) và \(k\) đều được đánh số bắt đầu từ 1. Khi đó, tam giác Pascal được xác định bởi các quy tắc sau:
Năm hàng đầu tiên của tam giác Pascal trông như sau:
Trong bài này, một đường đi Pascal là một dãy gồm \(S\) vị trí \((r_1,k_1),(r_2,k_2),\ldots,(r_S,k_S)\) trong tam giác Pascal, thỏa mãn các điều kiện sau:
Hãy tìm một đường đi Pascal bất kỳ gồm \(S \le 500\) vị trí sao cho tổng các số tại tất cả vị trí mà đường đi ghé qua bằng đúng \(N\). Đề bài bảo đảm rằng với mọi \(N\), luôn tồn tại ít nhất một đường đi như vậy.
Dòng đầu tiên chứa số lượng bộ test \(T\). Sau đó là \(T\) bộ test. Mỗi bộ test gồm một dòng duy nhất chứa một số nguyên \(N\).
Với mỗi bộ test, trước tiên in một dòng có dạng Case #x:, trong đó x là số thứ tự bộ test, bắt đầu từ 1. Sau đó in đường đi Pascal đề xuất có độ dài \(S \le 500\) bằng \(S\) dòng tiếp theo. Dòng thứ \(i\) phải có dạng r_i k_i, trong đó \((r_i,k_i)\) là vị trí thứ \(i\) trên đường đi. Chẳng hạn, dòng đầu tiên phải là 1 1, vì vị trí đầu tiên của mọi đường đi hợp lệ đều là \((1,1)\).
Tổng các số tại \(S\) vị trí của đường đi đề xuất phải bằng đúng \(N\).
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 | 3/35 | 8,57% |
| Test Set 2 | 11/35 | 31,43% |
| Test Set 3 | 21/35 | 60% |
Ví dụ 1
3
1
4
19
Case #1:
1 1
Case #2:
1 1
2 1
2 2
3 3
Case #3:
1 1
2 2
3 2
4 3
5 3
5 2
4 1
3 1
Google Code Jam 2020, Vòng 1A, bài Pascal Walk.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Nhiều trình dòng lệnh dùng dấu sao (*) để biểu thị "một chuỗi bất kỳ", kể cả chuỗi rỗng. Chẳng hạn, khi liệt kê các tệp khớp với BASH*, trình dòng lệnh có thể liệt kê BASH, BASHER và BASHFUL. Với *FUL, nó có thể liệt kê BEAUTIFUL, AWFUL và BASHFUL. Khi liệt kê B*L, nó có thể liệt kê BASHFUL, BEAUTIFUL và BULL.
Trong bài này, nói một cách hình thức, một mẫu là một chuỗi chỉ gồm các chữ cái tiếng Anh in hoa và các dấu sao (*), còn một tên là một chuỗi chỉ gồm các chữ cái tiếng Anh in hoa. Mẫu \(p\) khớp với tên \(m\) nếu ta có thể thay mỗi dấu sao trong \(p\) bằng một chuỗi (có thể rỗng) để thu được \(m\). Lưu ý rằng mỗi dấu sao có thể được thay bằng một chuỗi khác nhau.
Cho \(N\) mẫu, bạn có thể tìm một tên duy nhất gồm không quá \(10^4\) chữ cái và đồng thời khớp với tất cả các mẫu đó, hay xác định rằng điều này là không thể?
Dòng đầu tiên của dữ liệu vào chứa số lượng bộ test \(T\). Tiếp theo là \(T\) bộ test. Mỗi bộ test bắt đầu bằng một dòng chứa một số nguyên \(N\): số lượng mẫu cần được khớp đồng thời. Sau đó là \(N\) dòng, mỗi dòng chứa một chuỗi \(P_i\) biểu diễn mẫu thứ \(i\).
Với mỗi bộ test, in một dòng có dạng Case #x: y, trong đó x là số thứ tự của bộ test (bắt đầu từ 1), còn y là một tên bất kỳ gồm không quá \(10^4\) chữ cái sao cho mỗi \(P_i\) đều khớp với y theo định nghĩa trên; nếu không tồn tại tên như vậy, in * (tức là chỉ một dấu sao).
*), với mọi \(i\).*).*) duy 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 | 5/28 | 17,86% |
| Test Set 2 | 5/28 | 17,86% |
| Test Set 3 | 18/28 | 64,28% |
Ví dụ 1
2
5
*CONUTS
*COCONUTS
*OCONUTS
*CONUTS
*S
2
*XZ
*XYZ
Case #1: COCONUTS
Case #2: *
Trong trường hợp mẫu số 1, còn có các đáp án khả dĩ khác, trong đó có COCOCONUTS và ILIKECOCONUTS. Cả COCONUTSAREGREAT lẫn COCOANUTS đều không được chấp nhận. Lưu ý rằng cùng một mẫu có thể xuất hiện nhiều lần trong một bộ test.
Trong trường hợp mẫu số 2, không có tên nào được chấp nhận, vì vậy đáp án là *.
Các trường hợp sau không thể xuất hiện trong Test Set 1, nhưng có thể xuất hiện trong Test Set 2 hoặc Test Set 3:
4
H*O
HELLO*
*HELLO
HE*
HELLO và HELLOGOODBYEHELLO là những ví dụ về đáp án được chấp nhận. OTHELLO và HELLOO thì không được chấp nhận.
2
CO*DE
J*AM
Không có tên nào khớp với cả hai mẫu, vì vậy đáp án sẽ là *.
2
CODE*
*JAM
CODEJAM là một ví dụ về đáp án được chấp nhận.
Các trường hợp sau không thể xuất hiện trong Test Set 1 hoặc Test Set 2, nhưng có thể xuất hiện trong Test Set 3:
2
A*C*E
*B*D*
ABCDE và ABUNDANCE là hai trong số các đáp án có thể được chấp nhận, còn BOLDFACE thì không.
2
A*C*E
*B*D
Không có tên nào khớp với cả hai mẫu, vì vậy đáp án sẽ là *.
2
**Q**
*A*
QUAIL và AQ là hai trong số các đáp án có thể được chấp nhận ở đây.
Google Code Jam 2020, Vòng 1A, bài Pattern Matching.
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 tổ chức một cuộc thi khiêu vũ quốc tế. Bạn đã có đủ tất cả những thứ sau:
Nhưng bạn vẫn còn thiếu khán giả! Bạn lo rằng cuộc thi có thể chưa đủ hấp dẫn, nên đã nghĩ ra một cách tính mức độ hấp dẫn của cuộc thi.
Mỗi thí sinh chiếm một ô vuông đơn vị trên sàn và ở nguyên tại đó cho đến khi bị loại. Một hàng xóm theo hướng la bàn của thí sinh \(x\) là một thí sinh \(y\) sao cho \(x\) và \(y\) nằm trên cùng một hàng hoặc cùng một cột, đồng thời không có thí sinh nào vẫn còn thi đấu trong các ô nằm giữa \(x\) và \(y\). Mỗi thí sinh có thể có từ \(0\) đến \(4\) hàng xóm theo hướng la bàn, tính cả hai đầu mút; số lượng này có thể giảm nếu tất cả các thí sinh khác ở một hướng trực giao nào đó đều đã bị loại.
Cuộc thi diễn ra theo từng vòng. Giữa vòng \(i\) và vòng \(i+1\), nếu một thí sinh \(d\) có ít nhất một hàng xóm theo hướng la bàn trong vòng \(i\), và trình độ của \(d\) nhỏ hơn nghiêm ngặt trình độ trung bình của tất cả các hàng xóm theo hướng la bàn của \(d\), thì \(d\) bị loại và không còn tham gia cuộc thi ở các vòng \(i+1, i+2, i+3, \ldots\)
Lưu ý rằng khi xét những lượt loại khác cũng xảy ra giữa vòng \(i\) và vòng \(i+1\), \(d\) vẫn được tính là hàng xóm của các hàng xóm theo hướng la bàn của mình. Những thí sinh không có bất kỳ hàng xóm theo hướng la bàn nào sẽ không bao giờ bị loại. Nếu sau một vòng không có thí sinh nào bị loại, cuộc thi kết thúc.
Mức độ hấp dẫn của một vòng là tổng trình độ của các thí sinh đang nhảy trong vòng đó, kể cả những thí sinh sẽ bị loại giữa vòng ấy và vòng kế tiếp. Mức độ hấp dẫn của cuộc thi là tổng mức độ hấp dẫn của tất cả các vòng.
Cho trình độ của các vũ công có mặt trên sàn ở vòng đầu tiên, hãy tính mức độ hấp dẫn của cuộc thi.
Dòng đầu tiên chứa số lượng bộ test \(T\). Sau đó là \(T\) bộ test. Mỗi bộ test bắt đầu bằng một dòng chứa hai số nguyên \(R\) và \(C\). Tiếp theo là \(R\) dòng, mỗi dòng chứa \(C\) số nguyên. Giá trị thứ \(j\) trên dòng thứ \(i\) trong số các dòng này, \(S_{i,j}\), biểu thị trình độ của vũ công ở ô thuộc hàng thứ \(i\) và cột thứ \(j\) của sàn.
Với mỗi bộ test, in một dòng theo dạng Case #x: y, trong đó x là số thứ tự bộ test (bắt đầu từ \(1\)) và y là mức độ hấp dẫn của cuộc thi.
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 | 9/37 | 24,32% |
| Test Set 2 | 28/37 | 75,68% |
Ví dụ 1
4
1 1
15
3 3
1 1 1
1 2 1
1 1 1
1 3
3 1 2
1 3
1 2 3
Case #1: 15
Case #2: 16
Case #3: 14
Case #4: 14
??? "Giải thích"
Trong bộ test mẫu số $1$, trên sàn chỉ có một thí sinh. Vì thí sinh này không có hàng xóm theo hướng la bàn, người đó nhảy trong một vòng rồi cuộc thi kết thúc. Do đó, đáp án bằng trình độ của vũ công, tức là $15$.
Trong bộ test mẫu số $2$, mức độ hấp dẫn của vòng đầu tiên là
$$
1+1+1+1+2+1+1+1+1=10.
$$
Những thí sinh không ở tâm cũng không ở một góc có trình độ $1$, nhưng trình độ trung bình của các hàng xóm theo hướng la bàn của họ là $4/3$, lớn hơn $1$, nên họ bị loại. Sàn nhảy trong vòng thứ hai trông như sau:
```text
1 . 1
. 2 .
1 . 1
```
Đây là vòng cuối cùng. Mỗi thí sinh ở góc có hai hàng xóm theo hướng la bàn, nhưng trình độ trung bình của các hàng xóm bằng đúng trình độ của chính họ. Thí sinh ở tâm không có hàng xóm theo hướng la bàn. Mức độ hấp dẫn của vòng này là $1+1+2+1+1=6$. Vì vậy, mức độ hấp dẫn của cuộc thi là $10+6=16$.
Trong bộ test mẫu số $3$, thí sinh có trình độ $1$ bị loại sau vòng đầu tiên, còn hai thí sinh kia tiếp tục thi đấu. Ở vòng thứ hai, hai thí sinh còn lại trở thành hàng xóm theo hướng la bàn, khiến thí sinh có trình độ $2$ bị loại. Vòng thứ ba chỉ còn một thí sinh, vì vậy đây là vòng cuối cùng. Mức độ hấp dẫn của ba vòng lần lượt là $6$, $5$ và $3$, nên mức độ hấp dẫn của cuộc thi là $14$.
Google Code Jam 2020, Vòng 1A, bài Square Dance.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.