Universal Cup Judging System

Universal Cup

时间限制: 3.0 s 内存限制: 1024 MB 总分: 100 交互
统计

Þetta er gagnvirkt verkefni.

Leikurinn „Pípulagningamaðurinn Mariusz“ (Plumber Mariusz) samanstendur af $n + 1$ borðum (númeruðum frá 0 til $n$), og hvert þeirra hefur $k$ útgáfur (númeraðar frá 0 til $k - 1$). Hver útgáfa hvers borðs (nema þess síðasta) endar á tveimur pípum — þeirri vinstri og þeirri hægri — og Mariusz verður að stökkva ofan í annað hvort þeirra. Hver pípa inniheldur einhvern fjölda mynta og leiðir í eina af útgáfum næsta borðs. Nákvæmlega tvær pípur leiða í hverja útgáfu hvers borðs (nema borðs núll); þetta geta verið hvaða tvær sem er af þeim $2 \cdot k$ pípum sem liggja út úr öllum $k$ útgáfum fyrra borðs.

Ein umferð felst í því að velja útgáfu af borði núll og velja síðan vinstri eða hægri pípu $n$ sinnum, og niðurstaða umferðarinnar er heildarfjöldi mynta sem safnast í pípunum $n$ sem farið var um. Við fáum ekki að vita hversu margar myntir voru í hverri pípu eða hvaða útgáfur borðanna voru heimsóttar. Myntirnar í pípunum endurstillast alltaf í upphafsgildi sín, þannig að allar umferðir eru óháðar. Því má tákna eina umferð með fallinu:

int rozgrywka(int ver, string s), þar sem $\text{ver} \in [0, k - 1]$ og $s$ er strengur af $n$ bókstöfum L og P.

Athugið að L og P samsvara pólsku orðunum yfir vinstri og hægri í sömu röð.

Þú mátt framkvæma allt að $300\,000$ prófunarumferðir og fá að vita niðurstöður þeirra. Eftir það færðu allt að $10\,000$ fyrirspurnir um umferðir. Verkefni þitt er að ákvarða niðurstöður þeirra.

Hvert próf er ákveðið áður en samskiptin hefjast (þ.e. gagnvirkniforritið er ekki aðlögunarhæft). Próf inniheldur stefnt vegið net með $(n + 1) \cdot k$ hnútum sem raðað er í $n + 1$ lög (borð), og $q$ fyrirspurnir $(\text{ver}, s)$. Hver hnútur (nema þeir í síðasta laginu) hefur tvo útleggi (vinstri og hægri), þar sem hver leggur er lýstur með myntafjölda $c \in [1, 10^8]$ og útgáfu $v \in [0, k - 1]$ sem hann leiðir til. Munið að sérhver hnútur nema þeir í lagi núll hefur inngráðu nákvæmlega 2.

Tæming biðminnis (Buffer flushing)

Eftir að hver lína er prentuð út verður þú að tæma úttaksbiðminnið (flush), svo að gagnvirkniforritið fái úttakslínuna. Til dæmis, í C++ geturðu prentað línu sem inniheldur upphrópunarmerki með cout << "!" << endl; eða með printf("!\n"); fflush(stdout);. Í Python geturðu notað print("!", flush=True). Við ábyrgjumst ekki stöðuga hegðun gagnvirkniforritsins ef þú prentar margar línur án þess að tæma biðminnið á eftir hverri þeirra, eða ef þú prentar margar línur án þess að lesa svör gagnvirkniforritsins. Forritið þitt má ekki opna neinar skrár.

Samskiptareglur

Heildarflæði samskiptanna er lýst hér að neðan:

  • Lestu fyrstu línuna sem inniheldur tvær heiltölur $n$ og $k$ ($1 \le n, k \le 20$) — það eru $n + 1$ borð, hvert með $k$ útgáfur.
  • Allt að $300\,000$ sinnum, framkvæmdu prófunarumferð:
    • Prentaðu línu á forminu ? ver s (án gæsalappa), þar sem $\text{ver} \in [0, k - 1]$ og $s$ er strengur af $n$ bókstöfum L og P. Tæmdu biðminnið (Flush).
    • Lestu næstu línu sem inniheldur niðurstöðu umferðarinnar — heiltölu $x$ ($n \le x \le n \cdot 10^8 \le 2 \cdot 10^9$).
  • Prentaðu línu sem inniheldur eitt tákn ! (upphrópunarmerki). Tæmdu biðminnið (Flush).
  • Lestu næstu línu sem inniheldur heiltölu $q$ ($1 \le q \le 10\,000$) — fjölda fyrirspurna.
  • Fyrir hverja af $q$ fyrirspurnunum:
    • Lestu næstu línu sem inniheldur heiltölu $\text{ver}$ og streng $s$ (sömu mörk og að ofan).
    • Prentaðu línu sem inniheldur niðurstöðu umferðarinnar (heiltölu). Tæmdu biðminnið (Flush).

problem_15450_dbed39bd9dd2139d827bc296b5b97e76.png

Myndin sýnir fyrsta sýnidæmið ($n = 2; k = 4$). Tvær lokafyrirspurnir eru merktar með brotalínum: rozgrywka(0, "LL") $= 20 + 3 = 23$ og rozgrywka(1, "PL") $= 9 + 10 = 19$.

Dæmi

Hér er dæmi um samskiptaflæði:

Forritið þitt Gagnvirkniforrit Lýsing
2 4 3 borð ($0 \dots 2$), hvert með 4 útgáfur ($0 \dots 3$).
? 0 LL
23 Fyrri brotalínuleiðin á myndinni. Byrjaðu í útgáfu 0 af borði 0, stökktu í vinstri pípuna (20 myntir). Frá útgáfu 1 af borði 1 stökktu aftur í vinstri pípuna (3 myntir). Niðurstaða: $20 + 3 = 23$.
? 0 LL
23 Sama umferð, sama niðurstaða.
? 2 PL
610 $600 + 10 = 610$.
? 0 PP
9 $5 + 4 = 9$.
? 3 LP
7 $5 + 2 = 7$.
! Lok prófunarumferða.
2 Það eru $q = 2$ fyrirspurnir sem þarf að svara.
0 LL Heppilegt — við prófuðum nákvæmlega þessa umferð!
23
1 PL Við vitum ekki niðurstöðuna og getum ekki leitt hana út. Við prófuðum aldrei að byrja í útgáfu 1 af borði 0.
19 Af tilviljun giskum við á rétta niðurstöðu: $9 + 10 = 19$.

Athugasemd

Í viðhenginu (þú getur sótt það í flipanum „attachment“ á QOJ) finnurðu (rangar) sýnilausnir G.cpp og G.py sem framkvæma samskiptin rétt, en reikna niðurstöðurnar rangt. Mappan inniheldur einnig: sýniyfirlesara Gsoc.cpp og sýnipróf (G0a.in, G0b.in, G0c.in, og stórt slembipróf G0d.in með $n = k = 20$). Sniði prófunarskránna er lýst í athugasemd fremst í Gsoc.cpp.

Sýniyfirlesarinn Gsoc.cpp er ólíkur þeim sem notaður er á QOJ. Hann sannreynir hugsanlega ekki inntakið eða viðföng umferðarfallsins.

Þú getur keyrt lausnina þína með skriftunni run.sh. Skipunin tekur þýdda forritið og nafn prófunarskrárinnar. Til dæmis, til að keyra sýniforritin á sýniprófinu G0a.in:

  • C++: g++ G.cpp -o G.e && ./run.sh "./G.e" G0a.in
  • Python: ./run.sh "python3 G.py" G0a.in

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.