| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2019 - Examination | 100 (p) | 3.0s | 1G |
| 2 | JOI 2019 - Meetings | 100 (p) | 2.0s | 256M |
| 3 | JOI 2019 - Naan | 100 (p) | 3.0s | 256M |
Có \(N\) học sinh tham gia một kỳ thi gồm hai môn Toán và Tin học. Học sinh thứ \(i\) (\(1 \le i \le N\)) đạt \(S_i\) điểm Toán và \(T_i\) điểm Tin học. Giáo sư T và giáo sư I quyết định học sinh nào đỗ theo các tiêu chí sau:
Bạn chưa biết các giá trị \(A,B,C\). Cho \(Q\) bộ ba số nguyên \((X_j,Y_j,Z_j)\) (\(1 \le j \le Q\)), hãy tính số học sinh đỗ khi \(A=X_j\), \(B=Y_j\) và \(C=Z_j\) cho từng bộ ba.
Đọc từ đầu vào chuẩn các số nguyên theo định dạng:
N Q
S_1 T_1
...
S_N T_N
X_1 Y_1 Z_1
...
X_Q Y_Q Z_Q
Ghi \(Q\) dòng. Dòng thứ \(j\) chứa số học sinh đỗ theo bộ tiêu chí \((X_j,Y_j,Z_j)\).
Ví dụ 1
5 4
35 100
70 70
45 15
80 40
20 95
20 50 120
10 10 100
60 60 80
0 100 100
2
4
1
1
Ví dụ 2
10 10
41304 98327
91921 28251
85635 59191
30361 72671
28949 96958
99041 37826
10245 2726
19387 20282
60366 87723
95388 49726
52302 69501 66009
43754 45346 3158
25224 58881 18727
7298 24412 63782
24107 10583 61508
65025 29140 7278
36104 56758 2775
23126 67608 122051
56910 17272 62933
39675 15874 117117
1
3
5
8
8
3
3
3
5
6
JOI 2018/2019 Spring Training Camp, ngày 1. Đề gốc tiếng Anh, do Japanese Committee for the International Olympiad in Informatics công bố. Bản dịch tiếng Việt theo CC BY-SA 4.0.
Có \(N\) hòn đảo, đánh số từ \(0\) đến \(N-1\), được nối bằng \(N-1\) cây cầu hai chiều. Có thể đi từ bất kỳ đảo nào đến bất kỳ đảo nào bằng cầu. Mỗi đảo nối trực tiếp với không quá \(18\) cây cầu, và có một chú hải ly sinh sống.
Khi đúng ba chú hải ly gặp nhau, chúng chọn hòn đảo làm tổng số cầu mà cả ba phải đi qua nhỏ nhất. Hòn đảo như vậy luôn tồn tại duy nhất và có thể là nơi ở của một trong ba chú.
Bạn muốn xác định tất cả các cây cầu nhưng không thể kiểm tra trực tiếp. Mỗi lần, bạn chọn ba đảo phân biệt \(u,v,w\), yêu cầu ba chú hải ly ở đó gặp nhau, rồi được biết đảo mà chúng chọn. Hãy tìm cấu trúc nối các đảo bằng ít yêu cầu nhất có thể.
Nộp tệp meetings.cpp, khai báo #include "meetings.h" và cài đặt:
void Solve(int N);
Hàm được gọi đúng một lần cho mỗi test; \(N\) là số đảo. Chương trình có thể gọi hai hàm do thư viện cung cấp:
int Query(int u, int v, int w);
void Bridge(int u, int v);
Query(u, v, w) trả về đảo nơi ba chú hải ly gặp nhau. Các chỉ số phải thuộc \([0,N-1]\) và đôi một khác nhau, nếu không nhận Wrong Answer [1]. Không được gọi quá \(100\,000\) lần, nếu không nhận Wrong Answer [2].Bridge(u, v) báo rằng có cầu nối trực tiếp hai đảo. Phải có \(0\le u<v\le N-1\), nếu không nhận Wrong Answer [3]. Nếu không có cầu đó, nhận Wrong Answer [4]. Nếu báo cùng một cầu nhiều lần, nhận Wrong Answer [5]. Khi Solve kết thúc, phải đã gọi Bridge đúng \(N-1\) lần, nếu không nhận Wrong Answer [6].Có thể khai báo biến toàn cục và hàm phụ. Không được đọc đầu vào chuẩn, ghi đầu ra chuẩn hoặc giao tiếp với các tệp khác bằng bất kỳ cách nào. Có thể ghi thông tin gỡ lỗi ra đầu ra lỗi chuẩn.
Gói thư viện mẫu chính thức chứa grader.cpp, meetings.h và mã nguồn mẫu. Đặt các tệp trong cùng thư mục và biên dịch bằng:
g++ -std=gnu++14 -O2 -o grader grader.cpp meetings.cpp
Trình chấm mẫu chạy trong một tiến trình, đọc đầu vào chuẩn và ghi kết quả ra đầu ra chuẩn. Trình chấm thực tế khác trình chấm mẫu.
Đầu vào của trình chấm mẫu có dạng:
N
A_0 B_0
...
A_{N-2} B_{N-2}
Mỗi dòng \(A_i,B_i\) mô tả một cây cầu nối hai đảo đó.
Nếu chương trình trả lời đúng, trình chấm mẫu ghi số lần gọi Query, chẳng hạn Accepted: 100. Nếu có lỗi, nó ghi loại lỗi, chẳng hạn Wrong Answer [1]. Nếu có nhiều loại lỗi, chỉ một loại được báo.
Ở các nhóm \(1,2,3\), chỉ nhận toàn bộ điểm của nhóm khi trả lời đúng tất cả các test trong nhóm.
Ở nhóm \(4\), nếu trả lời đúng tất cả các test, gọi \(X\) là số lần gọi Query lớn nhất trong một test của nhóm. Điểm của nhóm là:
5
0 1
0 2
1 3
1 4
Một chuỗi lời gọi tương ứng:
| Bên gọi | Lời gọi | Giá trị trả về |
|---|---|---|
| Trình chấm | Solve(5) |
|
| Chương trình | Query(0, 1, 2) |
0 |
| Chương trình | Query(0, 3, 4) |
1 |
| Chương trình | Bridge(1, 3) |
Không có |
| Chương trình | Bridge(0, 2) |
Không có |
| Chương trình | Bridge(1, 4) |
Không có |
| Chương trình | Bridge(0, 1) |
Không có |
JOI 2018/2019 Spring Training Camp, ngày 1. Đề gốc tiếng Anh, do Japanese Committee for the International Olympiad in Informatics công bố. Bản dịch tiếng Việt theo CC BY-SA 4.0.
Quán cà ri JOI nổi tiếng với những chiếc bánh naan rất dài. Quán có \(L\) hương vị, đánh số từ \(1\) đến \(L\). Món được yêu thích nhất là bánh naan đặc biệt JOI, dài \(L\) cm. Vị trí \(x\) trên bánh là điểm cách đầu bên trái \(x\) cm. Đoạn từ vị trí \(j-1\) đến vị trí \(j\) mang hương vị \(j\) (\(1 \le j \le L\)).
Có \(N\) người đến quán, mỗi người có sở thích riêng. Khi người thứ \(i\) ăn \(1\) cm bánh mang hương vị \(j\), người đó nhận được \(V_{i,j}\) đơn vị hạnh phúc (\(1 \le i \le N\), \(1 \le j \le L\)).
Họ chỉ gọi một chiếc bánh naan đặc biệt JOI và chia bánh như sau:
Một cách chia được gọi là công bằng nếu mỗi người nhận được ít nhất \(\frac{1}{N}\) lượng hạnh phúc mà người đó sẽ nhận khi ăn cả chiếc bánh.
Cho sở thích của \(N\) người, hãy xác định có thể chia bánh công bằng hay không. Nếu có, hãy tìm một cách chia như vậy.
Đọc từ đầu vào chuẩn:
N L
V_{1,1} V_{1,2} ... V_{1,L}
...
V_{N,1} V_{N,2} ... V_{N,L}
Tất cả dữ liệu vào là số nguyên.
Nếu không có cách chia công bằng, ghi một dòng chứa -1. Ngược lại, ghi:
A_1 B_1
...
A_{N-1} B_{N-1}
P_1 P_2 ... P_N
Trong đó \(A_k,B_k\) là các số nguyên biểu diễn \(X_k=A_k/B_k\) với \(1 \le k \le N-1\). Nếu có nhiều đáp án đúng, có thể ghi bất kỳ đáp án nào.
Nếu xuất ra một cách chia, đáp án phải thỏa mãn:
Không yêu cầu \(A_k\) và \(B_k\) nguyên tố cùng nhau. Với các ràng buộc đầu vào trên, nếu tồn tại cách chia công bằng thì luôn tồn tại một đáp án đúng có mọi mẫu số không vượt quá \(10^9\).
Ví dụ 1
2 5
2 7 1 8 2
3 1 4 1 5
14 5
2 1
Khi ăn cả bánh, người thứ nhất nhận \(20\) đơn vị hạnh phúc, người thứ hai nhận \(14\). Vì vậy, cách chia công bằng cần cho họ lần lượt ít nhất \(10\) và \(7\) đơn vị hạnh phúc.
Cắt ở vị trí \(14/5\) và cho người thứ hai phần bên trái. Người thứ nhất nhận \(1\times\frac15+8+2=\frac{51}{5}\); người thứ hai nhận \(3+1+4\times\frac45=\frac{36}{5}\). Cả hai đều đạt ngưỡng yêu cầu.
Ví dụ 2
7 1
1
2
3
4
5
6
7
1 7
2 7
3 7
4 7
5 7
6 7
3 1 4 2 7 6 5
Bánh chỉ có một hương vị. Chia bánh thành \(7\) phần bằng nhau luôn công bằng, bất kể hoán vị \(P_1,\ldots,P_N\).
Ví dụ 3
5 3
2 3 1
1 1 1
2 2 1
1 2 2
1 2 1
15 28
35 28
50 28
70 28
3 1 5 2 4
Các cặp \(A_k,B_k\) không nhất thiết nguyên tố cùng nhau.
JOI 2018/2019 Spring Training Camp, ngày 1. Đề gốc tiếng Anh, do Japanese Committee for the International Olympiad in Informatics công bố. Bản dịch tiếng Việt theo CC BY-SA 4.0.