Solution #f0509416-80c0-4ae5-807f-6f96deb8c8c6

completed

Score

40% (2/5)

Runtime

26μs

Delta

-50.0% vs parent

-60.0% vs best

Regression from parent

Solution Lineage

Current40%Regression from parent
8ec5143380%Same as parent
da62d7c880%Same as parent
3d4c689e80%Same as parent
1f2128e780%Improved from parent
92397d700%Regression from parent
7cbd604b80%Improved from parent
fc42ee8d0%Regression from parent
b0db196680%Same as parent
692ab45880%Same as parent
8996709780%Improved from parent
17dd25090%Regression from parent
2524a75f80%Same as parent
e8534c5f80%Same as parent
bc1ec94080%Same as parent
7630bd9e80%Same as parent
ae983b2480%Same as parent
8252644380%Same as parent
9db0fb8580%Improved from parent
df1d6fd340%Regression from parent
ae833bc280%Same as parent
c90b917a80%First in chain

Code

def solve(input):
    jobs = input.get("jobs", []) if isinstance(input, dict) else []
    if not jobs:
        return 0

    jobs = [tuple(job) for job in jobs]
    jobs.sort(key=lambda x: x[0])

    n = len(jobs)
    starts = [0] * n
    ends = [0] * n
    weights = [0] * n
    for i, (s, e, w) in enumerate(jobs):
        starts[i] = s
        ends[i] = e
        weights[i] = w

    order_by_end = sorted(range(n), key=lambda i: ends[i])

    dp = [0] * n
    best_finished = 0
    p = 0

    for i in range(n):
        s = starts[i]
        while p < n and ends[order_by_end[p]] <= s:
            j = order_by_end[p]
            if dp[j] > best_finished:
                best_finished = dp[j]
            p += 1

        take = best_finished + weights[i]
        skip = dp[i - 1] if i > 0 else 0
        dp[i] = take if take > skip else skip

    return dp[-1]

Compare with Champion

Score Difference

-60.0%

Runtime Advantage

8μs slower

Code Size

36 vs 39 lines

#Your Solution#Champion
1def solve(input):1def solve(input):
2 jobs = input.get("jobs", []) if isinstance(input, dict) else []2 if not isinstance(input, dict):
3 if not jobs:3 return 0
4 return 04 raw = input.get("jobs")
55 if not raw:
6 jobs = [tuple(job) for job in jobs]6 return 0
7 jobs.sort(key=lambda x: x[0])7
88 jobs = []
9 n = len(jobs)9 for j in raw:
10 starts = [0] * n10 if isinstance(j, (list, tuple)) and len(j) == 3:
11 ends = [0] * n11 jobs.append((j[1], j[0], j[2])) # sort by end, store as (end, start, weight)
12 weights = [0] * n12 if not jobs:
13 for i, (s, e, w) in enumerate(jobs):13 return 0
14 starts[i] = s14
15 ends[i] = e15 jobs.sort()
16 weights[i] = w16 ends = []
1717 bests = []
18 order_by_end = sorted(range(n), key=lambda i: ends[i])18
1919 for e, s, w in jobs:
20 dp = [0] * n20 lo = 0
21 best_finished = 021 hi = len(ends)
22 p = 022 while lo < hi:
2323 mid = (lo + hi) >> 1
24 for i in range(n):24 if ends[mid] <= s:
25 s = starts[i]25 lo = mid + 1
26 while p < n and ends[order_by_end[p]] <= s:26 else:
27 j = order_by_end[p]27 hi = mid
28 if dp[j] > best_finished:28
29 best_finished = dp[j]29 candidate = w + (bests[lo - 1] if lo else 0)
30 p += 130 current = bests[-1] if bests else 0
3131
32 take = best_finished + weights[i]32 if candidate > current:
33 skip = dp[i - 1] if i > 0 else 033 if ends and ends[-1] == e:
34 dp[i] = take if take > skip else skip34 bests[-1] = candidate
3535 else:
36 return dp[-1]36 ends.append(e)
3737 bests.append(candidate)
3838
3939 return bests[-1] if bests else 0
Your Solution
40% (2/5)26μs
1def solve(input):
2 jobs = input.get("jobs", []) if isinstance(input, dict) else []
3 if not jobs:
4 return 0
5
6 jobs = [tuple(job) for job in jobs]
7 jobs.sort(key=lambda x: x[0])
8
9 n = len(jobs)
10 starts = [0] * n
11 ends = [0] * n
12 weights = [0] * n
13 for i, (s, e, w) in enumerate(jobs):
14 starts[i] = s
15 ends[i] = e
16 weights[i] = w
17
18 order_by_end = sorted(range(n), key=lambda i: ends[i])
19
20 dp = [0] * n
21 best_finished = 0
22 p = 0
23
24 for i in range(n):
25 s = starts[i]
26 while p < n and ends[order_by_end[p]] <= s:
27 j = order_by_end[p]
28 if dp[j] > best_finished:
29 best_finished = dp[j]
30 p += 1
31
32 take = best_finished + weights[i]
33 skip = dp[i - 1] if i > 0 else 0
34 dp[i] = take if take > skip else skip
35
36 return dp[-1]
Champion
100% (5/5)18μs
1def solve(input):
2 if not isinstance(input, dict):
3 return 0
4 raw = input.get("jobs")
5 if not raw:
6 return 0
7
8 jobs = []
9 for j in raw:
10 if isinstance(j, (list, tuple)) and len(j) == 3:
11 jobs.append((j[1], j[0], j[2])) # sort by end, store as (end, start, weight)
12 if not jobs:
13 return 0
14
15 jobs.sort()
16 ends = []
17 bests = []
18
19 for e, s, w in jobs:
20 lo = 0
21 hi = len(ends)
22 while lo < hi:
23 mid = (lo + hi) >> 1
24 if ends[mid] <= s:
25 lo = mid + 1
26 else:
27 hi = mid
28
29 candidate = w + (bests[lo - 1] if lo else 0)
30 current = bests[-1] if bests else 0
31
32 if candidate > current:
33 if ends and ends[-1] == e:
34 bests[-1] = candidate
35 else:
36 ends.append(e)
37 bests.append(candidate)
38
39 return bests[-1] if bests else 0