trang chủ / đề bài / icpc19_nat_i

Bài IMO khó hơn

Đề bài

Mô tả

Sau khi vượt qua vòng cuối của Kỳ thi Thợ săn, Gon giờ đã là một Thợ săn! Nhưng trước khi tiếp tục cuộc hành trình thú vị của mình, Gon quyết định về thăm nhà ở "Đảo While".

Dì Mito rất vui vì Gon đã trở thành Thợ săn và về thăm nhà. Nhưng đồng thời dì cũng lo lắng cho Gon: cuộc sống của một Thợ săn đầy thử thách. Vì vậy dì sẽ không cho Gon rời "Đảo While" trừ khi Gon giải được một câu đố do dì chuẩn bị.

Nhưng nên đưa cho Gon câu đố nào? Dì Mito mở "Đề thi IMO 2019" và tìm thấy bài toán sau:

Ngân hàng Bath phát hành các đồng xu có một mặt là H và mặt kia là T. Giáo sư Tuy có n đồng xu như vậy xếp thành một hàng từ trái sang phải. Ông lặp đi lặp lại thao tác sau: nếu có đúng k>0 đồng xu đang ngửa mặt H, ông lật đồng xu thứ k tính từ trái sang; ngược lại, mọi đồng xu đều ngửa mặt T và ông dừng lại. Ví dụ, với n=3, quá trình bắt đầu từ cấu hình THT là: THT → HHT → HTT → TTT, dừng lại sau ba thao tác.

Chứng minh rằng với mọi cấu hình ban đầu, giáo sư Tuy sẽ dừng lại sau hữu hạn thao tác.

"Bài này dễ quá", dì Mito nghĩ. "Gon sẽ giải được ngay."

Sau khi suy nghĩ thêm, dì Mito đổi bài toán trên thành phiên bản khó hơn như sau:

Với mỗi cấu hình ban đầu C, gọi L(C) là số thao tác được thực hiện trước khi giáo sư Tuy dừng lại. Cho một dãy S gồm các ký tự H, T và ?, biểu diễn một trạng thái ban đầu, trong đó ? là trạng thái chưa biết. Hãy tính giá trị trung bình của L(C) trên tất cả các dãy C được biểu diễn bởi S.

Dù Gon rất thông minh, cậu vẫn chưa giải được câu hỏi này. Hãy giúp Gon!

Dữ liệu vào

Dữ liệu vào gồm một dòng khác rỗng có không quá 106 ký tự: dãy S.

Dữ liệu ra

In ra một số thực là giá trị trung bình của L(C) như mô tả ở trên.

Đáp án được coi là đúng nếu sai số tương đối hoặc tuyệt đối không vượt quá 10−6. Cụ thể, gọi a là đáp án của bạn và b là đáp án của ban giám khảo, chương trình chấm chấp nhận nếu |a−b|max(1,b)≤10−6.

Ràng buộc

  • 1≤|S|≤106
  • S chỉ gồm các ký tự H, T và ?.

Ví dụ

Input Output Giải thích
HH 2.0 HH → HT → TT.
H? 1.5 HH cần 2 thao tác, HT cần 1 thao tác (HT → TT); trung bình là 1.5.
?? 1.5 HH, HT, TH, TT lần lượt cần 2, 1, 3, 0 thao tác; trung bình là 1.5.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0