[PYTHON] Atcoder AGC020 B - Jeu de patinoire

Avez-vous joué à ce jeu sur Skating Link?

Mec japonais cumulatif?

Regardez de l'arrière dans l'ordre et mettez à jour haut et bas La correspondance est différente selon que le nombre dans l'ordre actuel est plus grand que haut, plus petit que bas ou entre les deux à ce moment. Low est mis à jour à chaque fois, mais high n'est pas toujours le point qui m'a attiré

math.py


K=int(input())
A=list(map(int,input().split()))

if A[-1]!=2:
    print(-1)
    exit()

low=2
high=3
for item in A[::-1]:
    #print(low,high)
    if high<item:
        print(-1)
        exit()
    elif item<low:
        low=(-((-low)//item))*item
        if low>high:
            print(-1)
            exit()
        high=max(low+item-1,high+item-1-high%item)
    else:
        low=item
        if low>high:
            print(-1)
            exit()
        high=low+item-1
print(low,high)

Recherche de bisection

Étant donné que le tour est d'environ 10 ** 5 au mieux, ce n'est pas grave s'il s'agit de logN même si vous décidez du nombre de personnes et simulez Ainsi, vous pouvez trouver le nombre de personnes avant le début du jeu par recherche de deux minutes Si le réglage rond n'est pas faisable, il sera bogué, alors simulons enfin haut et bas pour voir si la réponse est correcte.

Au début, je me demandais s'il fallait tronquer la condition de fin ou la valeur médiane de 2. J'ai fait beaucoup d'essais et d'erreurs, mais j'aime la façon dont je l'écris maintenant Nibutan était fou quand j'ai rendu la plage de réglage initiale ridicule et juste avant TLE.

bisect.py


K=int(input())
A=list(map(int,input().split()))

def func(num):
    for item in A:
        num=num//item*item
    return num

ok=10**20
ng=0

while ok-ng>1:
    mid=(ok+ng)//2
    if func(mid)>=2:
        ok=mid
    else:
        ng=mid

low=ok

ok=10**20
ng=0

while ok-ng>1:
    mid=(ok+ng)//2
    if func(mid)>=4:
        ok=mid
    else:
        ng=mid

high=ng

if func(low)==2 and func(high)==2:
    print(low,high)
else:
    print(-1)

Recommended Posts

Atcoder AGC020 B - Jeu de patinoire
Atcoder Begginer Contst 065 --B: formé?