Submission #62309641


Source Code Expand

def query_1(x, y, pigeons_positions, nest_pigeons, num_of_crowded_nests):
    current_nest_id = pigeons_positions[x]

    # 鳩を移動させる
    pigeons_positions[x] = y

    # 巣にいる鳩の数を更新する
    nest_pigeons[y] += 1
    nest_pigeons[current_nest_id] -= 1

    # 巣xの鳩の数が負の場合はおかしい
    assert nest_pigeons[current_nest_id] >= 0

    # 複数羽いる鳩の巣の数を更新する
    # 巣yは必ず増えている。2になったらnum_of_crowded_nestsを増やす
    # print(f'num_of_crowded_nests: {num_of_crowded_nests}, nest_pigeons[y]: {nest_pigeons[y]}')
    if nest_pigeons[y] == 2:
        num_of_crowded_nests += 1
    # 巣xは必ず減っている。1になったらnum_of_crowded_nestを減らす
    # print(f'num_of_crowded_nests: {num_of_crowded_nests}, nest_pigeons[current_nest_id]: {nest_pigeons[current_nest_id]}')
    if nest_pigeons[current_nest_id] == 1:
        num_of_crowded_nests -= 1
    return num_of_crowded_nests


def query_2(nest_pigeons, num_of_crowded_nest):
    # print(nest_pigeons)
    print(num_of_crowded_nest)


def main(N, Q):
    # 各鳩が今どの巣にいるか
    pigeons_positions = {}
    # 各巣にいる鳩の数
    nest_pigeons = {}
    # 巣の数
    num_of_crowded_nests = 0
    for i in range(1, N + 1):
        pigeons_positions[i] = i
        nest_pigeons[i] = 1

    for _ in range(Q):
        queries = input().split()
        if len(queries) == 3:
            _, x, y = queries
            x = int(x)
            y = int(y)
            num_of_crowded_nests = query_1(
                x, y, pigeons_positions, nest_pigeons, num_of_crowded_nests
            )
            # print(f'check side effect: {num_of_crowded_nests}')
        else:
            query_2(nest_pigeons, num_of_crowded_nests)


N, Q = map(int, input().split())
main(N, Q)

Submission Info

Submission Time
Task C - Pigeonhole Query
User mu16
Language Python (PyPy 3.10-v7.3.12)
Score 300
Code Size 1919 Byte
Status AC
Exec Time 745 ms
Memory 307056 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 2
AC × 39
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 57 ms 76792 KiB
00_sample_01.txt AC 56 ms 76248 KiB
01_test_00.txt AC 57 ms 76760 KiB
01_test_01.txt AC 58 ms 76492 KiB
01_test_02.txt AC 68 ms 80860 KiB
01_test_03.txt AC 108 ms 84676 KiB
01_test_04.txt AC 212 ms 113480 KiB
01_test_05.txt AC 304 ms 83680 KiB
01_test_06.txt AC 468 ms 82808 KiB
01_test_07.txt AC 667 ms 306668 KiB
01_test_08.txt AC 466 ms 83976 KiB
01_test_09.txt AC 730 ms 306772 KiB
01_test_10.txt AC 442 ms 83432 KiB
01_test_11.txt AC 735 ms 307052 KiB
01_test_12.txt AC 420 ms 83924 KiB
01_test_13.txt AC 740 ms 306788 KiB
01_test_14.txt AC 402 ms 83912 KiB
01_test_15.txt AC 745 ms 306884 KiB
01_test_16.txt AC 364 ms 84452 KiB
01_test_17.txt AC 743 ms 306704 KiB
01_test_18.txt AC 326 ms 83624 KiB
01_test_19.txt AC 721 ms 306888 KiB
01_test_20.txt AC 302 ms 83992 KiB
01_test_21.txt AC 713 ms 306764 KiB
01_test_22.txt AC 263 ms 83772 KiB
01_test_23.txt AC 702 ms 306484 KiB
01_test_24.txt AC 234 ms 84100 KiB
01_test_25.txt AC 689 ms 306884 KiB
01_test_26.txt AC 179 ms 83308 KiB
01_test_27.txt AC 628 ms 306504 KiB
01_test_28.txt AC 361 ms 83264 KiB
01_test_29.txt AC 726 ms 306468 KiB
01_test_30.txt AC 358 ms 83540 KiB
01_test_31.txt AC 721 ms 306508 KiB
01_test_32.txt AC 356 ms 83396 KiB
01_test_33.txt AC 719 ms 306548 KiB
01_test_34.txt AC 720 ms 306836 KiB
01_test_35.txt AC 712 ms 307056 KiB
01_test_36.txt AC 624 ms 306888 KiB