Submission #1148827

#TimeUsernameProblemLanguageResultExecution timeMemory
1148827andrejikus방벽 (JOI15_walls)Pypy 3
0 / 100
135 ms48796 KiB
import bisect def min_barrier_moves(N, M, barriers, attacks): # Sort barriers by Ai barriers.sort() attack_positions = sorted(attacks) # Extract Ai and Bi separately for binary search A = [barriers[i][0] for i in range(N)] B = [barriers[i][1] for i in range(N)] # Movement count per barrier moves = [0] * N for P in attack_positions: # Find the nearest barrier that can cover attack P idx = bisect.bisect_left(B, P) # First barrier where Bi >= P if idx < N and A[idx] <= P <= B[idx]: # If P is already covered, no need to move continue # Otherwise, move the closest barrier left_idx = idx - 1 if idx > 0 else 0 right_idx = idx if idx < N else N - 1 if left_idx >= 0 and abs(A[left_idx] - P) < abs(A[right_idx] - P): # Move left barrier moves[left_idx] += abs(A[left_idx] - P) A[left_idx] = P B[left_idx] = P # Adjust range to absorb attack else: # Move right barrier moves[right_idx] += abs(A[right_idx] - P) A[right_idx] = P B[right_idx] = P return moves # Example usage N = 4 M = 4 barriers = [(0, 3), (4, 4), (2, 7), (8, 11)] attacks = [6, 4, 3, 8] result = min_barrier_moves(N, M, barriers, attacks) print("\n".join(map(str, result)))

Compilation message (stdout)

Compiling 'walls.py'...

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

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