Submission #1201155

#TimeUsernameProblemLanguageResultExecution timeMemory
1201155ofozLet's Win the Election (JOI22_ho_t3)Pypy 3
0 / 100
841 ms1114112 KiB
n = int(input())
k = int(input())
start = [0] * n
end = [0] * n

pairs = []
for i in range(n):
    a, b = map(int, input().split(" "))
    if b == -1: b = float('inf')
    pairs.append((a, b))

pairs = sorted(pairs, key = lambda p: (p[1], -p[0]))

for i, (a, b) in enumerate(pairs):
    start[i] = a
    end[i] = b

memo = [[[-1] * (n+1) for _ in range(n+1)] for _ in range(n+1)]
def dp(i: int, col: int, k: int, mxCol: int, memo: list[list[list[int]]]):
    if col == 0 and k == 0: return 0
    if col > k or i < 0 or col < 0: return float('inf')
    if memo[i][col][k] != -1: return memo[i][col][k]

    x = float('inf')
    if col: x = dp(i-1, col-1, k-1, mxCol, memo) + (end[i]/col)
    y = dp(i-1, col, k-1, mxCol, memo) + (start[i]/(mxCol+1))
    memo[i][col][k] = min(x, y)

    return memo[i][col][k]

def f(col: int):
    memo = [[[-1] * (n+1) for _ in range(n+1)] for _ in range(n+1)]
    return dp(n-1, col, k, col, memo)

res = float('inf')
l = 0
r = n
while r-l>2:
    m1 = l + (r-l)//3
    m2 = r - (r-l)//3

    f1 = f(m1)
    f2 = f(m2)
    if f1 > f2: l = m1
    else: r = m2
res = float('inf')
for i in range(l, r+1): res = min(res, f(i))
print(res)
# let dp[i][col][k] be the minimum amount of time to get col collaborators with k voters up to the i-th point.
# dp[i][col][k] = min(
#                dp[i-1][col-1][k-1] + b_i/(col+1),
#                dp[i-1][col][k-1] + a_i/(mxCol+1),
#                dp[i-1][col][k],
# )
# dp[i][0][0] = 0 for all i


Compilation message (stdout)

Compiling 'Main.py'...

=======
  adding: __main__.pyc (deflated 52%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...