Hide

Problem F
Varmare eller Kallare

Languages en sv

Du och Theo-dÅre Busskow är på en buss påväg till KTHs datasektions årliga resa till Åre, dÅre.
Bussresan tar väldigt lång tid så ni har tänkt spela "varmare eller kallare", så här funkar en omgång av spelet:

  • TheodÅre tänker på ett ord och ger dig ett startord så att du har någonting att utgå från

  • Du får gissa på ett ord

  • TheodÅre svarar med antingen "kallare" eller "varmare", först baserat på din förra gissning, sedan baserat på din bästa gissning

Ett ord är "varmare" om TheodÅre anser att ordets semantiska innebörd är närmre relaterat till det ord han har valt som svar, och ett ord är "kallare" om TheodÅre anser det mer avlägset relaterat.

Du vet ju inte helt vad TheodÅre associerar vissa ord med så det enda du kan gå på är att du vet att han läser mycket böcker och nyheter, samt vad du själv associerar ord med.

Så här fortsätter ni att köra tills du antingen har gissat rätt ord eller tills att du har varit så dålig att man lika gärna hade kunnat gissa alla ord i TheodÅres ordförråd (10001 stycken) på färre försök, för då blir han uttråkad och vill gå vidare till ett nytt ord (hela TheodÅres ordförråd finns i vocabulary.txt under "attachments" på kattis.)
Alltså får du 10001 försök innan ni går vidare tills nästa runda, det räknas då som om du har gissat rätt med 10001 försök.

Men oftast räcker ju inte en omgång för hela resan, så TheodÅre har bestämt sig för att ni ska köra $N$ omgångar av spelet.

För den här uppgiften har vi inte gett er någon träningsdata, det är därför tillåtet att använda all träningsdata ni än vill ha från internet.

Indata

Först kommer heltalet $N$ på en rad. Därefter kommer följande $N$ gånger tills spelet är slut:
En sträng $S$, ordet du får börja med.
För varje gissning du gör, antingen:

  1. en sträng "YES" eller "NO". "YES" innebär att du har gissat rätt ord medan "NO" betyder att du är så dålig att TheodÅre inte vill fortsätta med denna omgång. Efter "YES"/"NO" påbörjas nästa omgång om det inte var den sista.

  2. två stycken strängar: $S1, S2$. Dessa strängar är alltid antingen "hotter" eller "colder". $S1$ visar på om din gissning är "varmare" ("hotter") eller "kallare" ("colder") än förra ordet, medan $S2$ signalerar om din gissning är "varmare" eller "kallare" än din bästa gissning hittils.

Utdata

Efter varje gång TheodÅre har skickat ut en rad ska du skicka tillbaka en sträng, din gissning, såvida inte omgången är över.
Se till att flusha outputen efter varje utskrivning, annars kan du få Time Limit Exceeded. I C++ kan detta göras med exempelvis cout << flush; eller fflush(stdout);, i Python görs detta automatiskt när du använder input(), men annars behöver man använda sys.stdout.flush(), och i Java med System.out.flush();.

Poängsättning

Din lösning kommer att testas på en mängd testfallsgrupper. Poäng för ett givet testfall beräknas enligt följande formel:

\[ Score = min(100, 100\cdot (\frac{10001-totscore}{10000})^{13}) \]

där "totscore" är hur många gissningar det tog dig att komma fram till svaret i en given omgång.
Poängen du får på testfallet kommer att vara medelvärdet av Score på de omgångar vi testar. Under tävlingen kommer poängen baseras på $30\% $ av omgångarna per testfall, vi slutet av tävlingen kommer vi att byta till de andra $70\% $. Det är alltså inte säkert att poängen ni ser på scoreboard under tävlingen är densamme som den riktiga poängen.
Poängen du får per grupp är medelvärdet av alla testfalls poäng i gruppen.

Grupp

Poäng

Gränser

$1$

$30$

$N \leq 10$

$2$

$40$

$N \leq 100$

$3$

$30$

$N \leq 1000$

Read Sample Interaction 1 Write
1
utmaningar
bönder
hotter hotter
matematik
colder colder
svenskar
hotter colder
göteborgare
YES

Please log in to submit a solution to this problem

Log in