Google Code Jam 2016 - Teaching Assistant

Xem PDF




Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1800 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Bạn đang học một khóa lập trình được chấm bằng các bộ bài tập thuộc nhiều loại. Khóa học kéo dài một số ngày chẵn dương. Ban đầu bạn không có bộ bài nào. Mỗi ngày, bạn phải làm đúng một việc:

  • Yêu cầu một bộ bài “Coding”.
  • Yêu cầu một bộ bài “Jamming”.
  • Nộp một bộ bài để chấm. Chỉ được chọn việc này nếu đang giữ ít nhất một bộ. Nếu có nhiều bộ, bắt buộc phải nộp bộ được yêu cầu gần đây nhất, bất kể loại nào.

Mọi bộ bài đều khác nhau. Không có yêu cầu về số bộ từng loại phải nộp. Sau khi nộp, bạn không còn giữ bộ đó. Mọi bộ chưa nộp khi khóa học kết thúc đều không đem lại điểm.

Bạn yêu cầu và nộp bài cho một trợ giảng trí tuệ nhân tạo. Kỳ lạ thay, mỗi ngày trợ giảng có một trong hai tâm trạng: “Coding” hoặc “Jamming”.

Khi yêu cầu một bộ bài:

  • Nếu chủ đề yêu cầu trùng tâm trạng, trợ giảng giao bộ có điểm tối đa 10.
  • Nếu không trùng, trợ giảng giao bộ có điểm tối đa 5.

Khi nộp một bộ bài:

  • Nếu chủ đề bộ bài trùng tâm trạng ngày nộp, bạn nhận điểm tối đa của bộ đó.
  • Nếu không trùng, bạn nhận ít hơn điểm tối đa 5 điểm.

Ví dụ, nếu xin bộ Coding vào ngày trợ giảng có tâm trạng Coding và nộp vào ngày tâm trạng Jamming, bộ có tối đa 10 nhưng bị trừ 5, nên bạn nhận 5 điểm. Nếu xin bộ Jamming vào ngày tâm trạng Coding rồi nộp vào ngày tâm trạng Jamming, bộ chỉ có tối đa 5 nhưng được nhận trọn 5 điểm.

Nhờ một đồng nghiệp khóa trên hiểu trợ giảng, bạn biết trước tâm trạng mỗi ngày. Tổng điểm lớn nhất có thể đạt là bao nhiêu?

Dữ liệu vào

Dòng đầu chứa số bộ test \(T\). Mỗi bộ test gồm một dòng là chuỗi \(S\) chỉ gồm CJ. Ký tự thứ \(i\) mô tả tâm trạng ngày thứ \(i\): C là Coding và J là Jamming.

Dữ liệu ra

Với mỗi bộ test, in Case #x: y, trong đó x là số thứ tự bộ test, bắt đầu từ 1, và y là số điểm tối đa.

Ràng buộc

  • \(1\le T\le100\).
  • Độ dài \(S\) là số chẵn.

Phân nhóm

Test Set 1 (Small, hiển thị)

\(2\le |S|\le50\).

Test Set 2 (Large, ẩn)

  • \(2\le |S|\le20000\).
  • Tổng độ dài mọi chuỗi \(S\) trong bộ dữ liệu không quá 150000.

Điểm các phân nhóm

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/15 33,33%
Test Set 2 10/15 66,67%

Ví dụ

Ví dụ 1

Input
5
CCJJ
CJCJ
CJJC
CJJJ
CCCCCC
Output
Case #1: 20
Case #2: 10
Case #3: 20
Case #4: 15
Case #5: 30
Giải thích

Chiến lược tối ưu cho bộ test 1 là: ngày 1 xin bộ Coding C1; ngày 2 nộp C1; ngày 3 xin bộ Jamming J1; ngày 4 nộp J1.

Với các bộ test 2, 3, 4, chiến lược tối ưu là xin C1, xin J1, nộp J1, rồi nộp C1. Riêng ở bộ test 2, không thể xin C1, xin J1 rồi nộp C1, vì luôn phải nộp bộ được yêu cầu gần nhất.

Ở bộ test 5, có thể xen kẽ một ngày xin bộ Coding và ngày kế tiếp nộp nó.

Nguồn

Google Code Jam 2016, Vòng 3, bài Teaching Assistant.

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ình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: