/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 35ms 21.309 MiB
#2 Wrong Answer 54ms 29.754 MiB
#3 Wrong Answer 55ms 29.828 MiB

Code

import sys
from itertools import combinations
from collections import Counter

def main():
    input = sys.stdin.read
    data = input().split()
    t = int(data[0])
    idx = 1

    results = []

    for _ in range(t):
        n = int(data[idx])
        idx += 1
        a = list(map(int, data[idx:idx + n]))
        idx += n

        a.sort()
        
        if n == 2:
            results.append(1)
            continue

        dif = [a[i] - a[0] for i in range(1, n)]
        mx = 1

        for id in dif:
            st = Counter(a)
            rem = []
            pi = []
            pi.append((a[0], a[0] + id))
            st[a[0]] -= 1
            st[a[0] + id] -= 1

            if st[a[n - 1]] <= 0 or st[a[n - 1] - id] <= 0:
                continue

            st[a[n - 1]] -= 1
            st[a[n - 1] - id] -= 1

            while sum(st.values()) > 1:
                cur = next((key for key, val in st.items() if val > 0), None)
                if cur is None:
                    break
                st[cur] -= 1
                if st[cur + id] > 0:
                    pi.append((cur, cur + id))
                    st[cur + id] -= 1
                else:
                    rem.append(cur)

            pi.append((a[n - 1] - id, a[n - 1]))
            rem.extend([key for key, val in st.items() if val > 0 for _ in range(val)])

            if len(pi) <= 1:
                continue

            len_pi = len(pi)
            for mask in range(1 << len_pi):
                temp = []
                vis = [0] * len_pi
                cnt = 0

                for j in range(len_pi):
                    if (1 << j) & mask:
                        temp.append(j)
                        vis[j] = 1
                        cnt += 1

                if cnt < 2 or not vis[0] or not vis[len_pi - 1]:
                    continue
                
                if n % cnt != 0:
                    continue

                baki = rem[:]
                for j in range(len_pi):
                    if not vis[j]:
                        baki.append(pi[j][0])
                        baki.append(pi[j][1])

                if not baki:
                    mx = max(mx, len(temp))
                    continue

                baki.sort()
                lagba = n // cnt - 2

                kk = 0
                valid = True
                for ii in temp:
                    x, y = pi[ii]
                    d = lagba
                    while d > 0:
                        if kk >= len(baki) or not (x <= baki[kk] <= y):
                            valid = False
                            break
                        kk += 1
                        d -= 1
                    if not valid:
                        break

                if valid:
                    mx = max(mx, len(temp))

        results.append(mx)

    sys.stdout.write("\n".join(map(str, results)) + "\n")

if __name__ == "__main__":
    main()

Information

Submit By
Type
Submission
Problem
P1162 Roy and Maximum Partition
Language
PyPy 3 (Python 3.9.18 PyPy 7.3.15)
Submit At
2025-01-26 22:14:05
Judged At
2025-01-26 22:14:05
Judged By
Score
0
Total Time
55ms
Peak Memory
29.828 MiB