キーエンスプログラミングコンテスト2020 B – Robot Arms をPython3で解く

Share

AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。

出典:
キーエンスプログラミングコンテスト2020 B – Robot Arms

区間が重ならないように取っていく典型問題。左から貪欲に取っていくことになるが、区間が終了するのが早いものを優先的に取っていく。

# キーエンスプログラミングコンテスト2020 B - Robot Arms
# https://atcoder.jp/contests/keyence2020/tasks/keyence2020_b
# tag: 事前ソート 貪欲法 典型問題

# 区間が重ならないように、可能な限りたくさん配置を行う。
# スケジューリングなどの形で出てくることもある、典型問題。
# 解き方としては、区間の右側でソートを行い、貪欲に取っていけばいい。

def main():
N = int(input())
robots = [list(map(int, input().split())) for _ in range(N)]

# 与えられたデータを区間データに変換
arm_ranges = []
for x, l in robots:
arm_ranges.append((x-l, x+l))

# 区間の右側でソート
arm_ranges.sort(key=lambda x:x[1])

result = 0

# 現在取っている区間の右端を管理する
now = -10**10

for left, right in arm_ranges:
# 貪欲法。取れるなら取り、現在地を区間の右に変更
if left >= now:
result += 1
now = right

print(result)

main()
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です