A og B, sem hafa verið valin sem fulltrúar Japans á Alþjóttaupplýsingafræðiólympíuleikunum, hafa ákveðið að spila „Sendiboðaleikinn“ við K framkvæmdastjóra japönsku nefndarinnar fyrir Alþjóðaupplýsingafræðiólympíuleikana til að bæta færni sína í upplýsingavinnslu. Reglur þessa leiks eru útskýrðar hér að neðan.
A og B eru einangruð í herbergjum eins og sýnt er á myndinni. Þó að innanhússsímar séu í herbergjum A, B og K framkvæmdastjóra getur aðeins K framkvæmdastjóri hafið símtal. Önnur samskiptaleiðir eru lokaðar og A og B mega ekki yfirgefa herbergi sín nema samkvæmt fyrirmælum.
Herbergi A | Langur gangur | Herbergi K framkvæmdastjóra | Langur gangur | Herbergi B
Í upphafi leiksins segir K framkvæmdastjóri A jákvæða heiltölu $X$ í gegnum símann. Markmið leiksins er að A komi gildinu á $X$ rétt til skila til B án beinna samskipta þeirra á milli.
Í herbergi K framkvæmdastjóra er $4 \times 4$ reitanet. Látum $(i, j)$ tákna reitinn í $i$-tu röð og $j$-ta dálki ($1 \le i \le 4, 1 \le j \le 4$). Reitur $(1, 1)$ er efra vinstra hornið, $(1, 4)$ er efra hægra hornið, $(4, 1)$ er neðra vinstra hornið og $(4, 4)$ er neðra hægra hornið. Í upphafi leiksins er peði komið fyrir á einum af reitunum. Eftir það mun K framkvæmdastjóri ekki breyta reitnum sem peðið er á.
Frá þessum tímapunkti hringir K framkvæmdastjóri ítrekað í annaðhvort A eða B og kallar viðkomandi inn í herbergið. Í hvert sinn sem A eða B kemur inn í herbergi K framkvæmdastjóra verða þau að færa peðið á aðliggjandi reit (upp, niður, til vinstri eða til hægri). Eftir að hafa fært peðið fer A eða B aftur í sitt eigið herbergi. Ef B veit gildið á $X$ þegar B kemur í herbergi K framkvæmdastjóra getur B svarað K framkvæmdastjóra því í stað þess að færa peðið. Ef réttu gildi á $X$ er svarað telst það rétt svar; annars telst það rangt svar.
Tímasetningin þegar K framkvæmdastjóri kallar A eða B inn í herbergið er óregluleg, og A og B vita ekki í hvaða röð K framkvæmdastjóri kallar þau tvö inn í herbergið. Hins vegar ákveður K framkvæmdastjóri röðina sem kalla á þau tvö í upphafi leiksins, og tryggt er að K framkvæmdastjóri mun ekki kalla hvorki A né B oftar en 100 sinnum í röð. Ef B hefur ekki svarað gildinu á $X$ eftir að A eða B hefur snúið aftur í herbergi sitt eftir að K framkvæmdastjóri hefur kallað á A og B alls 10,000 sinnum, lýkur leiknum með röngu svari.
Verkefni
Útfærðu aðferðirnar fyrir A og B og búðu til forrit sem getur svarað rétt í „Sendiboðaleiknum“ sem lýst er hér að ofan.
Útfærsluatriði
Þú verður að skila tveimur skrám í sama forritunarmáli.
Fyrri skráin heitir playerA.c eða playerA.cpp. Þessi skrá útfærir aðferð A og verður að útfæra eftirfarandi föll:
void InitA(int T, int X)Þetta fall er kallað nákvæmlega einu sinni í upphafi. ViðfangiðTer númer undirverkefnisins. ViðfangiðXer jákvæða heiltalan sem A verður að koma til skila til B.int GameA(int I, int J)Þetta fall er kallað þegar A kemur inn í herbergi K framkvæmdastjóra. ViðfönginIogJeru heiltölurnar sem tákna reitinn $(I, J)$ þar sem peðið er staðsett þegar A kemur inn í herbergi K framkvæmdastjóra, og uppfylla $1 \le I \le 4$ og $1 \le J \le 4$. Þetta fall verður að skila einni af heiltölunum $-1, -2, -3, -4$. Ef einhverju öðru gildi er skilað er það dæmt sem Wrong Answer [1] og keyrslu forritsins er hætt. Þessi gildi tákna eftirfarandi aðgerðir A:- $-1$: Færa peðið á reitinn fyrir ofan $(I - 1, J)$.
- $-2$: Færa peðið á reitinn fyrir neðan $(I + 1, J)$.
- $-3$: Færa peðið á reitinn til vinstri $(I, J - 1)$.
- $-4$: Færa peðið á reitinn til hægri $(I, J + 1)$. Ef tilgreindur er leikur sem færir peðið út af borðinu er það dæmt sem Wrong Answer [2] og keyrslu forritsins er hætt.
Seinni skráin heitir playerB.c eða playerB.cpp. Þessi skrá útfærir aðferð B og verður að útfæra eftirfarandi föll:
void InitB(int T)Þetta fall er kallað nákvæmlega einu sinni í upphafi. ViðfangiðTer númer undirverkefnisins.int GameB(int I, int J)Þetta fall er kallað þegar B kemur inn í herbergi K framkvæmdastjóra. ViðfönginIogJeru heiltölurnar sem tákna reitinn $(I, J)$ þar sem peðið er staðsett þegar B kemur inn í herbergi K framkvæmdastjóra, og uppfylla $1 \le I \le 4$ og $1 \le J \le 4$. Þetta fall verður að skila einni af heiltölunum $-1, -2, -3, -4$, eða jákvæðri heiltölu $Y$. Ef einhverju öðru gildi er skilað er það dæmt sem Wrong Answer [3] og keyrslu forritsins er hætt. Þessi gildi tákna eftirfarandi aðgerðir B:- $-1$: Færa peðið á reitinn fyrir ofan $(I - 1, J)$.
- $-2$: Færa peðið á reitinn fyrir neðan $(I + 1, J)$.
- $-3$: Færa peðið á reitinn til vinstri $(I, J - 1)$.
- $-4$: Færa peðið á reitinn til hægri $(I, J + 1)$. Ef tilgreindur er leikur sem færir peðið út af borðinu er það dæmt sem Wrong Answer [4] og keyrslu forritsins er hætt.
- Jákvæð heiltala $Y$: Svara K framkvæmdastjóra að gildið á $X$ sé $Y$. Ef $X = Y$ er það rétt svar; annars er það dæmt sem Wrong Answer [5] og keyrslu forritsins er hætt.
Föllin GameA og GameB verða ekki kölluð oftar en 100 sinnum í röð fyrir hvort um sig. Einnig, ef GameB hefur ekki skilað jákvæðri heiltölu þegar GameA og GameB hafa verið kölluð alls 10,000 sinnum, er það dæmt sem Wrong Answer [6] og keyrslu forritsins er hætt.
Þér er frjálst að útfæra önnur föll eða skilgreina víðværar breytur til innri nota. Hins vegar, þar sem forritin tvö sem skilað er eru tengd saman við dæmatékkarann í eina keyranlega skrá, verður þú að skilgreina allar víðværar breytur og innri föll í hvorri skrá sem static til að komast hjá árekstrum við aðrar skrár. Við yfirferð er þetta forrit keyrt sem tvö aðskilin ferli, annað fyrir A og hitt fyrir B, þannig að ekki er hægt að deila víðværum breytum milli A-hliðarinnar og B-hliðarinnar. Lausnin þín má ekki á nokkurn hátt eiga samskipti við staðalinntak/-úttak eða neinar aðrar skrár.
Inntak
Dæmatékkarinn les eftirfarandi inntak af staðalinntaki:
- Fyrsta línan inniheldur heiltölurnar $T, X, I_0, J_0$ aðskildar með bilum, sem tákna númer undirverkefnisins $T$, heiltöluna $X$ sem A verður að koma til skila til B og upphafsstaðsetningu $(I_0, J_0)$ peðsins í upphafi leiksins.
- Önnur línan inniheldur streng af lengd nákvæmlega 10,000 sem samanstendur af tveimur tegundum stafa, 'A' og 'B'. Ef $k$-ti stafurinn ($1 \le k \le 10,000$) er 'A' eða 'B', þýðir það að $k$-ta fallið sem kallað er á eftir að
InitAogInitBeru kölluð erGameAeðaGameB, í þessari röð.
Úttak
Ef forritið lýkur keyrslu eðlilega skrifar dæmatékkarinn eftirfarandi upplýsingar á staðalúttak í einni línu:
- Ef það er rétt er skrifað út "Accepted" (gæsalappir eru ekki skrifaðar út í raun; það sama á við hér að neðan).
- Ef það er rangt er tegund rangs svars skrifuð út sem "Wrong Answer [1]" byggt á tölunum sem skrifaðar eru í kaflanum "Útfærsluatriði". Enn fremur, fyrir Wrong Answer [5], eru rétt gildi á $X$ og jákvæða heiltalan $Y$ sem fallið
GameBskilaði skrifuð út semWrong Answer [5] : X = 2, Y = 3.
Takmarkanir
Öll inntaksgögn uppfylla eftirfarandi skilyrði:
- $1 \le X \le 1,000,000,000$.
Undirverkefni
Undirverkefni 1 [20 stig]
- Uppfyllir $T = 1$.
- Kallað er á A í herbergi K framkvæmdastjóra fyrst, og síðan er kallað á A og B til skiptis í herbergi K framkvæmdastjóra. Það er að segja, eftir að kallað hefur verið á
InitAogInitB, er kallað á föllin í röðinniGameA,GameB,GameA,GameB, ...
Undirverkefni 2 [20 stig]
- Uppfyllir $T = 2$.
- Staðsetning peðsins í upphafi leiksins er $(I_0, J_0) = (1, 1)$. Það er að segja, eftir að kallað hefur verið á
InitAogInitB, er fyrst kallað á falliðGameAeðaGameBmeð $I = 1, J = 1$ sem viðföng.
Undirverkefni 3 [60 stig]
- Uppfyllir $T = 3$.
Athugasemd
Dæmi um inntak sem lesið er af dæmatékkaranum og dæmi um samsvarandi fallaköll eru sýnd hér að neðan.
| Inntak |
|---|
| 2 6 1 1 |
| ABBAABAAABBBBBABBAABBBABBBBAAAAABABAABAABBBBABAAAA (sleppt) |
| A-hlið | B-hlið | ||
|---|---|---|---|
| Kall | Skilagildi | Kall | Skilagildi |
| InitA(2, 6) | Ekkert | ||
| InitB(2) | Ekkert | ||
| GameA(1, 1) | -2 | ||
| GameB(2, 1) | -4 | ||
| GameB(2, 2) | -2 | ||
| GameA(3, 2) | -3 | ||
| GameA(3, 1) | -1 | ||
| GameB(2, 1) | 6 |
Athugið að þetta dæmi lýsir ekki endilega merkingarbærum samskiptum.