Google Code Jam 2016 - Coin Jam

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: 1700 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Một jamcoin là một chuỗi gồm \(N\ge2\) chữ số, có các tính chất sau:

  • Mọi chữ số là 0 hoặc 1.
  • Chữ số đầu là 1 và chữ số cuối là 1.
  • Nếu diễn giải chuỗi trong bất kỳ cơ số nào từ 2 đến 10, kể cả hai đầu, số nhận được không phải số nguyên tố.

Không phải mọi chuỗi 01 đều là jamcoin. Ví dụ, 101 không phải jamcoin vì trong cơ số 2 nó có giá trị 5, là số nguyên tố. Nhưng 1001 là một jamcoin: khi diễn giải lần lượt trong các cơ số từ 2 đến 10, nó có giá trị 9, 28, 65, 126, 217, 344, 513, 730 và 1001; không số nào là nguyên tố.

Chúng tôi nghe nói có những cộng đồng dùng jamcoin làm tiền tệ. Khi gửi jamcoin cho ai đó, phép lịch sự là chứng minh jamcoin hợp lệ bằng cách kèm một ước không tầm thường của giá trị jamcoin trong mỗi cơ số từ 2 đến 10. Ước không tầm thường của số nguyên dương \(K\) là số nguyên dương khác 1 và \(K\), đồng thời chia hết \(K\). Để thuận tiện, các ước phải được viết trong cơ số 10.

Ví dụ, với jamcoin 1001 ở trên, một bộ ước không tầm thường khả dĩ cho các giá trị trong cơ số 2 đến 10 lần lượt là 3, 7, 5, 6, 31, 8, 27, 5 và 77.

Bạn có thể tạo \(J\) jamcoin khác nhau có độ dài \(N\), cùng chứng minh chúng hợp lệ không?

Dữ liệu vào

Dòng đầu chứa số bộ test \(T\). Mỗi bộ test gồm một dòng chứa hai số nguyên \(N,J\).

Dữ liệu ra

Với mỗi bộ test, in \(J+1\) dòng. Dòng đầu chỉ gồm Case #x:, trong đó x là số thứ tự bộ test (bắt đầu từ 1). Mỗi dòng trong \(J\) dòng còn lại gồm một jamcoin độ dài \(N\), theo sau bởi chín số nguyên. Số thứ \(i\) trong chín số đó (đếm từ 1) phải là một ước không tầm thường của jamcoin khi nó được diễn giải trong cơ số \(i+1\).

Mọi jamcoin phải khác nhau. Không được in cùng một jamcoin trên hai dòng khác nhau, kể cả khi dùng bộ ước khác.

Ràng buộc

  • \(T=1\) (chỉ có một bộ test).
  • Bảo đảm tồn tại ít nhất \(J\) jamcoin khác nhau độ dài \(N\).

Phân nhóm

  • Test Set 1 (Hiển thị): \(N=16\), \(J=50\).
  • Test Set 2 (Ẩn): \(N=32\), \(J=500\).

Khác thường so với một bài Code Jam, bạn đã biết chính xác nội dung từng tệp đầu vào. Chẳng hạn, tệp đầu vào của Test Set nhỏ luôn gồm đúng hai dòng:

1
16 50

Vì vậy, bạn có thể thực hiện một số tính toán trước khi thực sự tải tệp đầu vào và bắt đầu tính giờ.

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

Ví dụ

Ví dụ 1

Input
1
6 3
Output
Case #1:
100011 5 13 147 31 43 1121 73 77 629
111111 21 26 105 1302 217 1032 513 13286 10101
111001 3 88 5 1938 7 208 3 20 11
Giải thích

Trong ví dụ này, \(N,J\) rất nhỏ để dễ giải thích. Bộ test mẫu không xuất hiện trong Test Set nhỏ hay lớn.

Đây chỉ là một trong nhiều lời giải hợp lệ. Có thể dùng các bộ jamcoin khác và nhiều bộ ước thập phân không tầm thường khác.

  • Không thể in 110111, vì chẳng hạn trong cơ số 3 nó bằng 337 (\(1\times243+1\times81+0\times27+1\times9+1\times3+1\times1\)), là số nguyên tố.
  • Không thể in 01010110101 là jamcoin, vì jamcoin phải bắt đầu bằng 1.
  • Không thể in 101010 vì jamcoin phải kết thúc bằng 1.
  • 110011 cũng là jamcoin và có thể được dùng, nhưng không thể thêm vào cuối đầu ra mẫu này vì phải in đúng \(J\) ví dụ.
  • Với jamcoin đầu tiên trong đầu ra mẫu, số đầu tiên sau 100011 không thể là 1 hay 35 vì đó là các ước tầm thường của 35 (100011 trong cơ số 2).

Nguồn

Google Code Jam 2016, Vòng loại, bài Coin Jam.

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: