Kho đề thi
Học sinh giỏi

HSG12 Hà Nội 2024

HSG / Olympic Tin học cấp THPT — https://oj.clue.edu.vn/exams/hn-hsg12-24/

Cấu trúc đề và tiến độ

Đang tải tiến độ…

  • 1
    Câu 1 — Khóa số

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm
  • 2
    Câu 2 — Mua sắm

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm
  • 3
    Câu 3 — Đèn lồng

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm
  • 4
    Câu 4 — Trò chơi

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm
  • 5
    Câu 5 — Hội chợ

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm

HSG12 Hà Nội 2024

Nguồn: ClueOJ statement pages printed to PDF and merged in exam order; not an original scan
Chuyển nhập/xuất tệp sang stdin/stdout khi chạy trên website.

Câu 1. Khóa số

Hải dùng ổ khóa số để khóa tủ cá nhân tại đội tuyển. Khóa gồm có bốn vòng số, mỗi vòng gồm 10 chữ số từ 0 đến 9. Các vòng số của khóa này có thể xoay tròn theo chiều kim đồng hồ hoặc ngược lại.

Hải đặt mật khẩu khóa của mình theo thứ tự từ trên xuống dưới của vị trí chốt là {2, 0, 2, 5}. Mỗi lần khóa, Hải xoay các số đi, khi nào muốn mở thì lại đưa các số về đúng dãy {2, 0, 2, 5}. Mỗi lần xoay thì một chữ số sẽ chuyển thành số kề bên trái hoặc kề bên phải của nó.

Chú ý: kề bên trái của 0 là 9, kề bên phải của 9 là 0.

Yêu cầu: Cho biết 4 chữ số A, B, C, D lần lượt là các chữ số đang xuất hiện trên từ trên xuống dưới của vị trí chốt. Em hãy lập trình tính giúp Hải xem phải xoay ít nhất bao nhiêu lần để có thể mở khóa.

Input

  • Gồm bốn chữ số A, B, C, D trên cùng một dòng, cách nhau bởi một dấu cách (0 ≤ A, B, C, D ≤ 9).

Output

  • Một số nguyên duy nhất là kết quả của bài toán.

Sample Input 1

2 3 8 1

Sample Output 1

11

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Câu 2. Mua sắm

Một cửa hàng trên sàn thương mại điện tử có N sản phẩm khác nhau được niêm yết với giá tiền lần lượt là A1, A2, ⋯, AN. Việt muốn mua hai sản phẩm, mỗi sản phẩm mua tối đa một lần, sao cho tổng số tiền phải trả nằm trong khoảng từ L đến R.

Yêu cầu: Hãy lập trình đưa ra số tiền nhỏ nhất mà Việt phải trả khi mua hai sản phẩm khác nhau mà tổng số tiền phải trả nằm trong đoạn [L, R].

Input

  • Dòng đầu tiên gồm ba số nguyên dương N, L, R (N ≤ 106; 1 ≤ L ≤ R ≤ 109);
  • Dòng thứ hai gồm N số nguyên dương A1, A2, ⋯, AN (Ai ≤ 109; 1 ≤ i ≤ N).

Output

  • Một số nguyên duy nhất là kết quả của bài toán. Dữ liệu bảo đảm luôn tồn tại ít nhất một cách mua thỏa mãn.

Sample Input 1

5 5 9
8 1 2 2 5

Sample Output 1

6

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Câu 3. Đèn lồng

Khu phố Nam ở đã treo N chiếc đèn lồng, được đánh số từ 1 đến N, từ trái sang phải. Ban đầu, chiếc đèn lồng thứ i có màu kí hiệu Ai (1 ≤ Ai ≤ 9). Một dãy đèn lồng liên tiếp được gọi là "cát tường" nếu có không quá K màu khác nhau, độ dài của dãy đèn được tính là số lượng đèn trong dãy đó.

Để chào mừng năm mới sắp đến, khu phố của Nam quyết định thay một số đèn sao cho xuất hiện dãy đèn "cát tường" là dài nhất có thể. Do ngân sách có hạn, khu phố chỉ thay thế được tối đa X chiếc đèn lồng.

Yêu cầu: Em hãy lập trình xác định độ dài lớn nhất của dãy đèn "cát tường" sau khi thay thế tối đa X chiếc đèn lồng.

Input

  • Dòng đầu tiên gồm ba số nguyên dương lần lượt là N, K, X (1 ≤ K ≤ 9; 1 ≤ X ≤ N ≤ 105) với N là số đèn lồng đã treo, K là giá trị lớn nhất về số màu trong dãy đèn "cát tường", X là số lượng đèn nhiều nhất có thể thay thế;
  • Dòng thứ hai gồm N số nguyên dương Ai mô tả màu của chiếc đèn thứ i (1 ≤ Ai ≤ 9).

Output

  • Một số nguyên duy nhất là kết quả của bài toán.

Sample Input 1

6 2 2
1 9 3 2 3 5

Sample Output 1

5

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Câu 4. Trò chơi

Công ty của Chiến tổ chức trò chơi chọn số trong buổi tiệc cuối năm. Ban tổ chức chuẩn bị sẵn một bộ số gồm N số nguyên A1, A2, ⋯, AN và N tấm thẻ. Trên mỗi tấm thẻ ghi một số tự nhiên có giá trị từ 1 đến N, các giá trị trên thẻ đôi một khác nhau. Ban tổ chức sẽ phát cho mỗi người chơi một tấm thẻ bất kỳ trong N tấm thẻ. Luật chơi đưa ra như sau:

  • Giả sử người chơi nhận được tấm thẻ ghi số nguyên Ki;
  • Sau đó, người chơi chọn ra tối đa Ki đoạn con trên bộ số ban đầu mà Ban tổ chức đã chuẩn bị, mỗi đoạn gồm một hoặc nhiều phần tử liên tiếp, các đoạn con không có phần tử chung. Người chơi có quyền chọn đoạn con nào;
  • Điểm của người chơi là tổng các số trong các đoạn đã chọn. Ban tổ chức sẽ trao phần thưởng tương ứng với số điểm mà người chơi đạt được.

Yêu cầu: Có Q người chơi khác nhau. Em hãy lập trình đưa ra số điểm lớn nhất mà mỗi người chơi có thể nhận được.

Input

  • Dòng đầu tiên chứa hai số nguyên N, Q (1 ≤ Q ≤ N ≤ 105) tương ứng số lượng phần tử trong bộ số và số lượng người tham gia trò chơi;
  • Dòng thứ hai chứa N số nguyên, số nguyên thứ i biểu diễn giá trị của Ai (-104 ≤ Ai ≤ 104);
  • Dòng thứ ba chứa Q số nguyên, số nguyên thứ i là Ki (1 ≤ Ki ≤ N) mô tả số ghi trên tấm thẻ của người chơi thứ i. Các Ki đảm bảo phân biệt và được sắp xếp theo thứ tự tăng dần.

Output

  • Gồm Q dòng, dòng thứ i tương ứng là kết quả của người chơi thứ i khi được phát tấm thẻ ghi số Ki.

Sample Input 1

5 3
1 -1 2 -2 3
1 2 5

Sample Output 1

3
5
6

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Câu 5. Hội chợ

Thắng tham gia thử thách "check-in" trong hội chợ tết của thành phố. Hội chợ gồm có N điểm bán hàng được đánh số từ 1 đến N. Các điểm bán hàng được nối với nhau bởi M đường hai chiều, mỗi đường có một cửa chắn với mã số là một số nguyên dương. Các mã khóa trên cửa chắn là đôi một khác nhau. Có K điểm bán hàng đặc biệt S1, S2, ⋯, SK là điểm "check-in" để hoàn thành thử thách.

Ở mỗi lượt, ban đầu cửa chắn tại tất cả các con đường đều khóa. Người chơi sẽ nhận được thông tin gồm hai số tự nhiên X và D tương ứng là số hiệu của điểm bán hàng xuất phát và chìa khóa số D. Chìa khóa số D sẽ mở được những cánh cửa có mã khóa là bội của D. Ví dụ: chìa khóa có số 2 sẽ mở được các cánh cửa có mã khóa là 2, 4, 6, 8, ⋯, chìa khóa có số 7 sẽ mở được các cửa khóa bởi mã khóa là 7, 14, 21, 28, ⋯. Người chơi cần tìm đường đi như sau:

  • Xuất phát từ điểm bán hàng X;
  • Đích đến là một trong các điểm bán hàng đặc biệt S1, S2, ⋯, SK;
  • Số lượng con đường đi qua là nhỏ nhất.

Yêu cầu: Thắng tham gia Q lượt chơi, với mỗi lượt Thắng nhận được một cặp số (X, D). Em hãy lập trình đưa ra số lượng con đường nhỏ nhất Thắng cần đi qua để đến đích tại mỗi lượt chơi.

Input

  • Dòng đầu tiên gồm bốn số nguyên dương N, M, K, Q (N, M, Q ≤ 3 × 105; 1 ≤ K ≤ N) tương ứng lần lượt là số lượng điểm bán hàng, số lượng con đường nối giữa N điểm bán, số lượng điểm bán hàng đặc biệt và số lượt chơi;
  • Dòng thứ hai gồm K số nguyên dương S1, S2, ⋯, SK (1 ≤ Si ≤ N; 1 ≤ i ≤ K) mô tả các điểm bán hàng đặc biệt;
  • M dòng, mỗi dòng gồm ba số nguyên u, v, c (1 ≤ u, v ≤ N; 1 ≤ c ≤ 106) mô tả có một đường hai chiều nối giữa điểm bán u và điểm bán v mà trên đường đó có một cánh cửa chắn với mã khóa là c;
  • Q dòng, mỗi dòng gồm hai số nguyên X và D là thông tin của mỗi lượt chơi.

Output

  • Gồm Q dòng, tương ứng với Q lượt chơi, nếu có đường đi thỏa mãn yêu cầu đề bài thì in ra số con đường nhỏ nhất Thắng cần đi qua để đến đích, ngược lại, nếu không có cách nào để đi đến đích thì in ra -1.

Sample Input 1

5 7 2 4
4 5
3 4 14
1 2 16
2 4 5
1 4 7
4 5 9
1 3 8
3 5 4
1 2
1 5
1 1
2 4

Sample Output 1

2
-1
1
3

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Không có thời lượng chính thức trong nguồn; phòng luyện tập dùng 180 phút, không mô phỏng thời lượng kỳ thi gốc. Nguồn chưa xác nhận đầy đủ điểm từng bài; dùng trọng số đều trên thang luyện tập 100, không phải thang điểm chính thức. Chuyển nhập/xuất tệp sang stdin/stdout; tiếng Việt là bản nguồn, bản tiếng Anh chưa dịch.
Nhóm Zalo