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:
-
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.
-
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