Submission #23613523


Source Code Expand

from collections import defaultdict

class UnionFind():
    def __init__(self, n):
        self.n = n
        self.parents = [-1] * n
        
    def find(self, x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x] = self.find(self.parents[x])
            return self.parents[x]
    
    def union(self, x, y):
        x = self.find(x)
        y = self.find(y)
        
        if x == y:
            return
        
        if self.parents[x] > self.parents[y]:
            x, y = y, x
        
        self.parents[x] += self.parents[y]
        self.parents[y] = x
    
    def size(self, x):
        return -self.parents[self.find(x)]
        
    def same(self, x, y):
        return self.find(x) == self.find(y)
    
    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i) == root]
    
    def roots(self):
        return [i for i, x in enumerate(self.parents) if x < 0]

    def group_count(self):
        return len(self.roots())
    
    def all_group_members(self):
        group_members = defaultdict(list)
        for member in range(self.n):
            group_members[self.find(member)].append(member)
        return group_members
    
    def __str__(self):
        return '\n'.join(f'{r}: {m}' for r, m in self.all_group_members().items())

n = int(input())
a = list(map(int, input().split()))

b = []

change = dict()
cnt = 0
for v in a:
    if v in change:
        b += [change[v]]
    else:
        b += [cnt]
        change[v] = cnt
        cnt += 1

#m = (n + 1) // 2

kaibun = UnionFind(n)

for i in range(n):
    kaibun.union(b[i], b[n - i - 1])

res = 0

for g in kaibun.all_group_members().values():
    res += len(g) - 1

print(res)

Submission Info

Submission Time
Task D - KAIBUNsyo
User cubesat
Language Python (3.8.2)
Score 400
Code Size 1837 Byte
Status AC
Exec Time 490 ms
Memory 70856 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 3
AC × 31
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt
Case Name Status Exec Time Memory
sample_01.txt AC 22 ms 9124 KiB
sample_02.txt AC 31 ms 9080 KiB
sample_03.txt AC 20 ms 9132 KiB
test_01.txt AC 31 ms 9080 KiB
test_02.txt AC 20 ms 9076 KiB
test_03.txt AC 23 ms 9192 KiB
test_04.txt AC 21 ms 9224 KiB
test_05.txt AC 28 ms 9140 KiB
test_06.txt AC 30 ms 9152 KiB
test_07.txt AC 441 ms 53076 KiB
test_08.txt AC 454 ms 49520 KiB
test_09.txt AC 96 ms 17016 KiB
test_10.txt AC 347 ms 43924 KiB
test_11.txt AC 189 ms 28192 KiB
test_12.txt AC 34 ms 10188 KiB
test_13.txt AC 158 ms 25376 KiB
test_14.txt AC 261 ms 33880 KiB
test_15.txt AC 437 ms 60784 KiB
test_16.txt AC 477 ms 55484 KiB
test_17.txt AC 411 ms 50416 KiB
test_18.txt AC 428 ms 50164 KiB
test_19.txt AC 480 ms 55616 KiB
test_20.txt AC 481 ms 55696 KiB
test_21.txt AC 476 ms 55764 KiB
test_22.txt AC 490 ms 55556 KiB
test_23.txt AC 387 ms 62424 KiB
test_24.txt AC 415 ms 55264 KiB
test_25.txt AC 359 ms 70856 KiB
test_26.txt AC 345 ms 59996 KiB
test_27.txt AC 380 ms 51144 KiB
test_28.txt AC 429 ms 51100 KiB