Aluksi listan sisältö on [1,2,3,...,n]. Joka askeleella otat listan kaksi ensimmäistä alkiota ja siirrät ne listan loppuun käänteisessä järjestyksessä. Mikä on listan ensimmäinen alkio k askeleen jälkeen?
Esimerkiksi kun n=4 ja k=3, lista muuttuu näin:
[1,2,3,4] \rightarrow [3,4,2,1] \rightarrow [2,1,4,3] \rightarrow [4,3,1,2]
Tässä tapauksessa listan ensimmäinen alkio on siis 4.
Voit olettaa, että n on välillä 2 \dots 10^5 ja k on enintään 10^5. Tavoitteena on, että algoritmin aikavaativuus on O(n+k).
Toteuta tiedostoon fliptwo.py
funktio solve
, joka palauttaa ensimmäisen alkion k askeleen jälkeen.
def solve(n,k): # TODO if __name__ == "__main__": print(solve(4,3)) # 4 print(solve(12,5)) # 11 print(solve(99,555)) # 11 print(solve(12345,54321)) # 9875
Lisähaaste: Tehtävä on mahdollista ratkaista myös matemaattisesti ajassa O(1). Voit halutessasi miettiä myös tällaista ratkaisua.