Lý lịch
Hãy xem xét một chuỗi các thanh (đóng), mỗi thanh có chiều dài nguyên. Có bao nhiêu khác biệt lỗ miễn polyominoes bạn có thể hình thành với một chuỗi cho trước? Hay nói cách khác, bạn có thể tạo thành bao nhiêu đa giác không tự giao nhau với các cạnh thẳng hàng với một chuỗi nhất định?
Hãy xem xét một ví dụ. Hãy xem xét một chuỗi cụ thể bao gồm 8 thanh có chiều dài 1 và 2, mà chúng ta có thể đại diện là [1, 1, 2, 2, 1, 1, 2, 2]
. Lên đến các phép quay và dịch, chỉ có 8 đa giác có thể (chúng tôi đếm các phản xạ khác nhau):
Thanh đầu tiên này có màu xanh đậm, và sau đó chúng ta đi qua đa giác theo nghĩa ngược chiều kim đồng hồ .
Ý nghĩa của xoay không ảnh hưởng đến kết quả trong ví dụ trên. Nhưng hãy xem xét một chuỗi khác [3, 1, 1, 1, 2, 1, 1]
, mang lại 3 đa giác sau:
Lưu ý rằng chúng tôi không bao gồm sự phản ánh của polyomino cuối cùng, bởi vì nó sẽ yêu cầu di chuyển theo chiều kim đồng hồ.
Nếu chúng ta có một chuỗi linh hoạt hơn có cùng độ dài [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
, chúng ta thực sự có thể tạo thành cả hai phản xạ giữa một số polyonin khác, tổng cộng là 9:
Các thách thức
Đưa ra một mô tả về một chuỗi, như một mảng hoặc tương tự, xác định số lượng đa giác riêng biệt mà bạn có thể hình thành (lên đến các phép quay và dịch) bằng cách sử dụng các thanh theo thứ tự trong khi đi xung quanh chu vi theo nghĩa ngược chiều kim đồng hồ.
Vui lòng viết một chương trình đầy đủ và bao gồm các lệnh để biên dịch (nếu có) và chạy mã của bạn từ dòng lệnh. Vui lòng bao gồm một liên kết đến một trình biên dịch / trình thông dịch miễn phí cho ngôn ngữ của bạn.
Chương trình của bạn nên đọc đầu vào từ STDIN. Dòng đầu tiên sẽ chứa một số nguyên M . Các dòng M tiếp theo sẽ là các trường hợp thử nghiệm, mỗi trường hợp sẽ là một danh sách các chiều dài thanh được phân tách bằng dấu cách. Chương trình của bạn nên in M dòng thành STDOUT, mỗi dòng bao gồm một số nguyên duy nhất - số lượng đa giác riêng biệt có thể được hình thành.
Bạn chỉ phải sử dụng một chủ đề duy nhất.
Chương trình của bạn không được sử dụng nhiều hơn 1 GB bộ nhớ bất cứ lúc nào. (Đây không phải là giới hạn hoàn toàn nghiêm ngặt, nhưng tôi sẽ giám sát việc sử dụng bộ nhớ thực thi của bạn và tiêu diệt bất kỳ quy trình nào sử dụng liên tục hơn 1 GB hoặc tăng đột biến trên nó.)
Để ngăn chặn quá nhiều tính toán trước, mã của bạn không được dài hơn 20.000 byte và bạn không được đọc bất kỳ tệp nào.
Bạn cũng không được tối ưu hóa đối với các trường hợp thử nghiệm cụ thể đã chọn (ví dụ: bằng cách mã hóa kết quả của chúng). Nếu tôi nghi ngờ rằng bạn làm như vậy, tôi bảo lưu quyền tạo các bộ chuẩn mới. Các bộ kiểm tra là ngẫu nhiên, do đó hiệu suất của chương trình của bạn trên các bộ đó phải là đại diện cho hiệu suất của nó trên đầu vào tùy ý. Giả định duy nhất bạn được phép đưa ra là tổng chiều dài của thanh là chẵn.
Chấm điểm
Tôi đã cung cấp các bộ chuẩn cho các chuỗi N = 10, 11, ..., 20 que. Mỗi bộ kiểm tra chứa 50 chuỗi ngẫu nhiên có độ dài từ 1 đến 4.
Điểm chính của bạn là N lớn nhất mà chương trình của bạn hoàn thành toàn bộ bài kiểm tra trong vòng 5 phút (trên máy của tôi, trong Windows 8). Bộ ngắt kết nối sẽ là thời gian thực tế mà chương trình của bạn thực hiện trên bộ kiểm tra đó.
Nếu bất cứ ai đánh bại bộ thử nghiệm lớn nhất, tôi sẽ tiếp tục thêm những cái lớn hơn.
Các trường hợp thử nghiệm
Bạn có thể sử dụng các trường hợp kiểm tra sau để kiểm tra tính đúng đắn của việc triển khai.
Input Output
1 1 0
1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 3
1 1 1 1 1 1 1 1 1 1 9
1 1 1 1 1 1 1 1 1 1 1 1 36
1 1 1 1 1 1 1 1 1 1 1 1 1 1 157
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 758
1 1 2 2 1 1 2 2 8
1 1 2 2 1 1 2 2 1 1 23
1 1 2 2 1 1 2 2 1 1 2 2 69
1 2 1 2 1 2 1 2 3
1 2 1 2 1 2 1 2 1 2 1 2 37
1 2 3 2 1 2 3 2 5
1 2 3 2 1 2 3 2 1 2 3 2 23
3 1 1 1 2 1 1 3
1 2 3 4 5 6 7 1
1 2 3 4 5 6 7 8 3
1 2 3 4 5 6 7 8 9 10 11 5
2 1 5 3 3 2 3 3 4
4 1 6 5 6 3 1 4 2
3 5 3 5 1 4 1 1 3 5
1 4 3 2 2 5 5 4 6 4
4 1 3 2 1 2 3 3 1 4 18
1 1 1 1 1 2 3 3 2 1 24
3 1 4 1 2 2 1 1 2 4 1 2 107
2 4 2 4 2 2 3 4 2 4 2 3 114
Bạn tìm thấy một tập tin đầu vào với những ở đây .
Bảng xếp hạng
User Language Max N Time taken (MM:SS:mmm)
1. feersum C++ 11 19 3:07:430
2. Sp3000 Python 3 18 2:30:181