trang chủ / bài tập / cowrun / lời giải

Chạy Trên Vòng Tròn

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Lời giải: Bò Chạy

Hướng tiếp cận

Bài toán là cây AND/OR: FJ (OR node) chọn B hoặc T để đảm bảo thắng, Bessie (AND node) cần cả hai lựa chọn đều dẫn đến thắng. Giải đệ quy từ trên xuống với short-circuit evaluation ngẫu nhiên để tối ưu hóa thực tế.

Nhận xét quan trọng

  1. Cấu trúc cây AND/OR với chiều sâu N14: tại mỗi vòng, FJ chọn (OR), Bessie phản ứng (AND). Tổng số nút cây là O(4N) nhưng short-circuit cắt tỉa rất mạnh.
  2. FJ muốn chiến lược từ điển nhỏ nhất: thử B trước (vì B < T). Nếu B đảm bảo thắng thì chọn B; ngược lại thử T.
  3. Công thức cập nhật vị trí: R(R×(1+Xtop)+Xbot)modM. Dùng __int128 để tránh tràn số khi RX lên tới 109.
  4. Ngẫu nhiên hóa thứ tự kiểm tra lựa chọn của Bessie giúp tăng tốc tìm kiếm (nếu một lựa chọn thua, trả về sớm).

Thuật toán

  1. Đọc N, M, K, chuỗi nước đi của Bessie, và 8 giá trị lá bài mỗi vòng.
  2. Định nghĩa check_fj(round, R, fj): kiểm tra nếu FJ chọn fj (0=T, 1=B), thì với mọi lựa chọn của Bessie, kết quả đều thắng (AND). Nếu là vòng cuối kiểm tra winning(R_new), ngược lại đệ quy can_win(round+1, R_new).
  3. Định nghĩa can_win(round, R): thử B trước (fj=1), nếu check_fj trả về true thì thắng; ngược lại thử T.
  4. Mô phỏng thực tế: tại vòng i, thử B trước; nếu check_fj(i, R, 1) thì ghi 'B', theo dõi nước đi thực của Bessie để cập nhật R; ngược lại ghi 'T'.
  5. In chuỗi nước đi của FJ.

Độ phức tạp

  • Thời gian: O(2N) trong trường hợp xấu nhất (cây AND/OR đầy đủ), nhưng short-circuit cắt tỉa mạnh trong thực tế
  • Bộ nhớ: O(N) (chiều sâu đệ quy)

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0