Hide

Problem C
Where's Waldo?

Det finns en gömd permutation $P_{1},P_{2},\ldots ,P_{N}$ av längd $N$, som är garanterad att vara genererad uniformt slumpmässigt. Permutationen innehåller talen $1, 2, 3, \ldots , N$ exakt en gång vardera i någon okänd ordning.

Du kan välja positioner $l$ och $r$, och ställa frågor på formen: “Vad är summan av $P_ l + P_{l+1} + \cdots + P_ r$?”

Din uppgift är att hitta på vilken position $1$:an befinner sig i $P$ med så få frågor som möjligt. Du får poäng beroende på hur få frågor du ställer.

Interaktion

Ditt program ska först läsa in två heltal på en rad, $T$ och $N$. $T$ är antalet omgångar ditt program kommer köras, och $N$ är längden på $P$.

Därefter sker $T$ omgångar:

När en omgång börjar kan du börja ställa frågor. Skriv ut en rad med “? a b” för att fråga efter summan av talen mellan position $a$ och $b$ ($1 \leq a \leq b \leq N$).

Efter varje fråga ska ditt program läsa in ett heltal, summan av talen i intervallet.

När du har hittat vilken position $1$:an befinner sig på, skriv ut en rad på formen “! i”, där $i$ är det index sådant att $P_ i = 1$. Efter att du skrivit ut detta börjar nästa omgång.

Se till att flusha outputen efter varje query, annars kan du få Time Limit Exceeded. I C++ kan detta göras med exempelvis cout << flush eller fflush(stdout); i Python med stdout.flush(); och i Java med System.out.flush().

Poängsättning

Ditt program kommer att testas mot ett enda testfall, med $N = T = 1000$.

Om någon omgång ger fel svar kommer inskickningen bedömas som Wrong Answer.

Låt $M$ vara antalet frågor ditt program ställer över alla $T$ omgångar. Du kommer då få $\min (100, 220 - \frac{M}{2500})$ poäng. Om du får negativ poäng så räknas det som noll poäng.

Alltså, om du använder fler än $550\, 000$ frågor får du 0 poäng, och om du använder $300\, 000$ eller färre frågor får du 100 poäng. Där emellan växer poängen linjärt.

Read Sample Interaction 1 Write
 2 10
 ? 1 10
 55
 ? 1 5
 40
 ? 6 6
 1
 ! 6
 ? 1 1
 1
 ! 1

Please log in to submit a solution to this problem

Log in