Universal Cup Judging System

Universal Cup

Time Limit: 15.0 s Memory Limit: 2048 MB Total points: 100 Difficulty: [show] Interactive Communication Hackable ✓
Statistics

Ini adalah soal interaktif. Ingatlah untuk melakukan flush pada buffer keluaran setelah setiap pencetakan. Untuk melakukan flush pada keluaran, Anda dapat menggunakan:

  • fflush(stdout) atau cout.flush() di C/C++;
  • System.out.flush() di Java dan Kotlin;
  • sys.stdout.flush() di Python.

problem_16334_77704ec8666e21115ab8bd1ebbcde701.png
Konsep permainan, diilustrasikan oleh Nano Banana Pro.

Anda sedang berpartisipasi dalam sebuah permainan strategi berbasis giliran yang dikenal sebagai Revolver Roulette.

Permainan dimulai dengan sebuah revolver yang diisi tepat $6$ peluru. Setiap peluru secara independen memiliki peluang yang sama untuk menjadi peluru tajam (live) atau peluru hampa (blank). Kedua pemain selalu mengetahui jumlah peluru tajam dan peluru hampa yang tersisa di dalam silinder saat ini, tetapi urutan pastinya tidak diketahui.

Setiap pemain memulai dengan $5$ poin kesehatan (HP) dan $2$ item. Jika HP seorang pemain turun menjadi $0$ atau di bawahnya, pemain tersebut tereliminasi dan pemain lainnya menang. Para pemain bergantian melakukan aksi.

Prosedur Giliran

Selama gilirannya, pemain aktif dapat melakukan aksi-aksi berikut sebanyak apa pun:

  • Menggunakan item apa pun.
  • Melakukan aksi menembak apa pun.

Giliran hanya berakhir ketika suatu aksi menembak menyebabkan giliran berpindah ke pemain lain, atau salah satu pemain tereliminasi.

Aksi Menembak

Pemain aktif harus memilih salah satu dari aksi menembak berikut:

  • Fire at Opponent: Pemain aktif menembakkan peluru berikutnya ke arah lawan. Jika peluru tersebut tajam, lawan kehilangan $1$ HP. Terlepas dari jenis pelurunya, giliran berpindah ke lawan.
  • Fire at Self: Pemain aktif menembakkan peluru berikutnya ke dirinya sendiri. Jika peluru tersebut tajam, pemain aktif kehilangan $1$ HP, dan giliran berpindah ke lawan. Sebaliknya, jika peluru tersebut hampa, pemain aktif mempertahankan gilirannya dan terus melakukan aksi.

Item

Ketika sebuah item digunakan, item tersebut habis dipakai, dan pemain aktif tetap mempertahankan gilirannya terlepas dari jenis itemnya. Item dapat dilihat oleh kedua pemain. Ketika seorang pemain memperoleh item baru (termasuk masing-masing item awal), item tersebut dipilih secara acak seragam dari empat jenis berikut:

  • Dummy: Menembakkan peluru berikutnya ke boneka latihan. Aksi ini menghabiskan peluru tersebut dan tidak dianggap sebagai aksi menembak.
  • Magnifier: Mengintip peluru berikutnya untuk mengungkap apakah peluru berikutnya tajam atau hampa. Kedua pemain mengetahui hasilnya.
  • Converter: Membalikkan jenis peluru berikutnya (tajam $\leftrightarrow$ hampa). Kedua pemain mengamati jumlah peluru tajam dan hampa yang telah diperbarui.
  • Cage: Mendapatkan efek satu kali pakai yang mencegah berakhirnya giliran pada aksi menembak berikutnya yang seharusnya mengakhiri giliran. Secara khusus:

    • Jika pemain kemudian melakukan Fire at Opponent (terlepas dari apakah pelurunya tajam atau hampa), efek ini berlaku dan giliran tidak berakhir.
    • Jika pemain kemudian melakukan Fire at Self dan pelurunya tajam, efek ini berlaku dan giliran tidak berakhir (pemain tetap kehilangan $1$ HP, tetapi mempertahankan gilirannya).

    Efek ini langsung habis segera setelah berlaku satu kali. Paling banyak satu item Cage yang boleh digunakan per giliran.

Pengisian Ulang (Reloading)

Ketika silinder kosong, $6$ peluru baru segera dimasukkan (masing-masing secara independen tajam atau hampa dengan peluang yang sama). Kedua pemain diberi tahu mengenai jumlah peluru tajam dan hampa yang baru. Selain itu, setiap pemain diisi ulang itemnya hingga maksimal $2$ item (pemain dengan $k$ item menerima $(2 - k)$ item baru, yang masing-masing dipilih secara independen dan acak seragam dari empat jenis di atas).

Tujuan

Anda adalah pemain yang mengambil giliran pertama, dan tujuan Anda adalah memenangkan permainan dengan mengeliminasi lawan Anda.

Masukan

Baris pertama berisi dua bilangan bulat $n$ dan $w$, yang menyatakan bahwa Anda perlu memenangkan setidaknya $w$ dari $n$ permainan untuk mendapatkan status diterima (accepted). Hanya ada tiga pengujian:

  • Pengujian contoh: $n = 1$ dan $w = 0$. ($0\%$)
  • Pengujian rahasia 1: $n = 2\,000$ dan $w = 1\,000$. ($50\%$)
  • Pengujian rahasia 2: $n = 20\,000$ dan $w = 11\,000$. ($55\%$)

Dapat ditunjukkan bahwa ketika kedua pemain bermain secara optimal, pemain yang mengambil giliran pertama memenangkan sekitar $56.89\%$ permainan.

Protokol Interaksi

Permulaan Permainan

Solusi Anda berperan sebagai pemain yang mengambil giliran pertama melawan interaktor. Pada awal setiap permainan, interaktor mencetak sebuah bilangan bulat $g$:

  • Jika $g = 0$, semua permainan pada eksekusi saat ini telah selesai. Solusi Anda harus segera berhenti.
  • Selain itu, $g$ adalah indeks permainan saat ini ($1 \le g \le n$).

Karena kendala teknis, solusi Anda dijalankan dua kali pada setiap pengujian:

  • Interaktor dapat memutuskan apakah akan memulai ulang solusi Anda dengan memberikan $g = 0$ kapan saja.

Anda akan menerima $n$ dan $w$ yang sama untuk setiap eksekusi dalam satu pengujian. Oleh karena itu, $n$ tidak selalu sama dengan banyaknya permainan dalam eksekusi saat ini. Dijamin bahwa setiap permainan $1, \dots, n$ dimainkan tepat satu kali di sepanjang dua eksekusi tersebut. Selain hal ini, solusi Anda dapat dengan aman mengabaikan ketentuan dijalankan dua kali tersebut.

Status Permainan

Kemudian, interaktor mencetak baris status permainan yang berisi $13$ bilangan bulat non-negatif:

$$t \quad l \quad b \quad h_1 \quad d_1 \quad m_1 \quad c_1 \quad k_1 \quad h_2 \quad d_2 \quad m_2 \quad c_2 \quad k_2$$

  • $t \in \{0, 1, 2\}$: status giliran.
  • $l, b$ ($1 \le l + b \le 6$): jumlah peluru tajam dan peluru hampa yang saat ini tersisa di dalam silinder.
  • $h_1$ ($0 \le h_1 \le 5$): HP Anda saat ini.
  • $d_1, m_1, c_1, k_1$ ($0 \le d_1 + m_1 + c_1 + k_1 \le 2$): banyaknya item Dummy, Magnifier, Converter, dan Cage yang sedang Anda pegang.
  • $h_2$ ($0 \le h_2 \le 5$): HP lawan Anda saat ini.
  • $d_2, m_2, c_2, k_2$ ($0 \le d_2 + m_2 + c_2 + k_2 \le 2$): banyaknya item Dummy, Magnifier, Converter, dan Cage yang dipegang lawan Anda.

Kasus $t = 0$ (Permainan Berakhir)

Permainan saat ini telah berakhir. Interaktor melanjutkan ke permainan berikutnya (mencetak $g$ yang baru).

Kasus $t = 1$ (Giliran Anda)

Anda harus mencetak sebuah bilangan bulat untuk memilih aksi:

  1. Fire at Opponent.
  2. Fire at Self.
  3. Gunakan item Dummy.
  4. Gunakan item Magnifier.
  5. Gunakan item Converter.
  6. Gunakan item Cage.

Jika aksi tidak valid (misalnya menggunakan item yang tidak Anda miliki, atau menggunakan item Cage lebih dari sekali pada giliran yang sama), status permainan tidak berubah, interaktor mencetak $0$ dan baris status yang sama ($13$ bilangan bulat) lagi. Meskipun tetap giliran Anda, Anda harus melakukan aksi valid lainnya untuk melanjutkan permainan.

Sebaliknya, jika aksi efektif, interaktor mencetak sebuah bilangan bulat hasil:

  • Untuk aksi $1$–$5$: Mengembalikan $1$ jika peluru berikutnya sebelum aksi adalah tajam, $2$ jika hampa.
  • Untuk aksi $6$: Mengembalikan $1$ (tidak ada informasi peluru yang diungkap).

Interaktor kemudian mencetak baris status permainan yang telah diperbarui.

Kasus $t = 2$ (Giliran Lawan)

Interaktor menyimulasikan aksi lawan Anda dan mencetak dua baris:

  • ID aksi $a \in \{1, \dots, 6\}$.
  • Bilangan bulat hasil ($1$ atau $2$ seperti dijelaskan di atas).

Lawan Anda tidak pernah melakukan aksi ilegal. Segera setelahnya, interaktor mencetak baris status permainan berikutnya ($13$ bilangan bulat).

Untuk setiap ronde permainan, simulator permainan menggunakan pembangkit bilangan acak semu dengan seed acak yang tetap. Selain itu, lawan di dalam interaktor menggunakan strategi deterministik. Keputusan untuk memulai ulang solusi Anda bersifat independen dari prosedur interaksi. Oleh karena itu, barisan aksi yang sama selalu menghasilkan status permainan yang sama.

Sebuah alat penguji disediakan untuk membantu Anda mengembangkan dan menguji solusi Anda.

Contoh

Contoh 1, Tahap 1

Masukan
1 0
1
1 3 3 5 0 0 0 2 5 1 0 1 0

1
1 3 3 5 0 0 0 1 5 1 0 1 0

1
1 2 3 5 0 0 0 1 4 1 0 1 0

0
1 2 3 5 0 0 0 1 4 1 0 1 0

2
1 2 2 5 0 0 0 1 4 1 0 1 0

1
2 1 2 5 0 0 0 1 3 1 0 1 0
5
2
2 2 1 5 0 0 0 1 3 1 0 0 0
1
1
1 1 1 4 0 0 0 1 3 1 0 0 0

1
2 0 1 4 0 0 0 1 2 1 0 0 0
3
2
2 2 4 4 0 1 0 1 2 0 1 0 1
2
1
1 1 4 4 0 1 0 1 1 0 1 0 1

1
1 1 4 4 0 0 0 1 1 0 1 0 1

1
0 0 4 4 0 0 0 1 0 0 1 0 1
0
Keluaran


6


1


6


2


1








1








4


1

Contoh 1, Tahap 2

Masukan
1 0
0
Keluaran
		

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.