考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC026-B - N重丸 を解く

ABC026-B - N重丸

 

N重丸が外側から赤、白、赤、白、… と塗り分けられているので

赤い部分の面積を求めよという問題

 

一番外が赤であることから、一番外の円の面積を求め、

その一つ内にある円の面積を引き、

さらにその一つ内にある円の面積を足し、

さらに一つ内にある円の面積を引き、

さらにその一つ内にある円の面積を足し、

さらに一つ内にある円の面積を引き、

 

といったように外側から円の面積を求めて

順に足し引きを繰り返していけばよさそうだ

  

提出したコード

import math

# 入力
N=int(input())

# 面積
s=0

l=[]
for i in range(N):
  l.append(int(input()))

# ソート
l=sorted(l,key=lambda x:x,reverse=True)

for i in range(N):
  a=l[i]
  if i%2==0:
    s+=a*a*math.pi
  else:
    s-=a*a*math.pi

# 出力
print(s)

 

上記コードでは円周率 math.pi を使用するため

mathモジュールをインポートしている

import math
 
また、入力値は大きい順とは限らないので降順ソートを実施している
# ソート
l=sorted(l,key=lambda x:x,reverse=True)
 
ループ回数を2で割った余りに着目することで
円の面積の足し引きを実現させていることに注目
for i in range(N):
  a=l[i]
  if i%2==0:
    s+=a*a*math.pi
  else:
    s-=a*a*math.pi 

 

提出結果はACでした