今日の精進(20191228)

バイトがあったのでほとんど進まなかった。研究もやらなければ…

Box and Ball

ボールが通った箱と箱の中にあるボールの数をシミュレートして、ボールが通ったかつ中にボールがあるような箱の数を数えて出力

# coding: utf-8  
N, M = map(int, input().split())  
b = [False] * N  
l = [1] * N  
b[0] = True  
for i in range(M):  
    x, y = map(int, input().split())  
    if b[x-1] == True:  
        b[y-1] = True  
    if l[x-1] > 0:  
        l[y-1] += 1  
        l[x-1] -= 1  
    if l[x-1] == 0:  
        b[x-1] = False  

ans = 0  
for i in range(N):  
    if b[i] == True and l[i] > 0:  
        ans += 1  
print(ans)  

Table Tennis Training

今日のAGC。辛かった…
2人の距離の偶奇で場合分け。偶数の場合はお互いに寄っていけばいいので$(B-A) / 2$、奇数の場合は橋に近い方に一旦寄って、1回待てば奇数になるのであとは同じ計算。一回待つ発想がなかなか出なかったし式を間違えて4WA。もう少しはやくこういうのはできるようになりたい。

# coding: utf-8  
N, A, B = map(int, input().split())  
# A < B が保証  

if (B - A) % 2 == 1:  
    # どっちの角による  
    if B - A >= 3:  
        ans = 0  
        if A - 1 < N - B:  
            ans += A - 1  
            B = B - (A - 1)  
            B -= 1  
            ans += 1  
            A = 1  
            print(ans + (B - A) // 2)  
        else:  
            ans += N - B  
            A = A + (N - B)  
            B = N  
            A += 1  
            ans += 1  
            print(ans + (N - A) // 2)  
    else:  
        print(min(N - A, B - 1))  
else:  
    print((B - A) // 2)  

感想

今日はあまり時間が取れなかったのでほとんど問題が解けなかった。あとAGCとても疲れた。始めてAGC中にACしたけど、難易度の割にとても時間がかかったのであまりうれしくなかった。