[白俊]2477瓜田Python


ウリ畑


質問する


田舎の太陽のおじさんの家にはメロン畑がたくさんあります.突然、太陽がこの畑で育ったメロンが何個あるか知りたい.どうやって理解しようかと考えていたが、やっといい考えが浮かんだ.ユリカ!1 m 2の幅でメロンの個数を算出し、その後メロン畑の幅を求めると、比例式でメロンの総個数を求めることができる.
1メートル2の幅に生えているメロンは数えすぎて、今はメロン畑の幅を求めればいいだけです.瓜田は角字型または角字型を呈し、90度、180度、270度回転し、六角形を呈している.幸いなことに、畑の境界(六角形)は東西方向か南北方向です.田んぼの一角から、田んぼの周りを回って、田んぼの辺の長さを測りました.

例えば瓜畑は上図と同じです.図の中で右は東で、左は西で、下は南で、上は北です.この図の左上の頂点から、反時計回りに南へ30メートル、東へ60メートル、南へ20メートル、東へ100メートル、北へ50メートル、西へ160メートル、再び起点に戻ります.
上図の瓜畑の面積は6800平方メートルです.幅1メートル2の瓜の数が7なら、この畑の瓜の数は47600です.
1 m 2の幅の瓜の個数と瓜地を構成する六角形のいずれかの頂点から反時計回りに迂回した辺の方向と長さで順次与えられる.この瓜畑に生えているメロンの数を求めるプログラムを作ってください.

入力


1行目は正の整数K(1≦K≦20)を与え,幅1 m 2のメロンの個数を表す.瓜田を表す六角形のいずれかの頂点から、反時計回りに回った辺の方向と長さ(1以上500以下の整数)を2行目から7行目まで、1行ずつ順番に与えます.辺の方向では、東が1、西が2、南が3、北が4と表示されます.

しゅつりょく


1行目の入力出力は、所与の畑で成長したメロンの数です.

解決策

  • の大きな矩形から空の矩形を取り除く形で問題を解決した.
  • の移動形態を考慮して、縦最大値のインデックス前後値を減算し、絶対値を加算すると、空の矩形の横方向値が得られる.
  • 縦の値も(最大(横))程度の値を取ればいいです.
  • import sys
    
    K = int(sys.stdin.readline())
    
    #E=1, W=2, S=3, N=4
    height = []
    width = []
    total = []
    #동서쪽으로 움직이는 경우와 남북쪽으로 움직이는 경우를 나눠서 리스트에 넣어준다.
    for i in range(6):
        dir, length = map(int, sys.stdin.readline().split())
        if dir == 1 or dir ==2:
            width.append(length)
            total.append(length)
        else:
            height.append(length)
            total.append(length)
    
    bigbox = max(height) * max(width)
    
    #세로 최대값 
    maxhidx = total.index(max(height))
    #가로최대값 
    maxwidx = total.index(max(width))
    
    #전체 이동에서 세로 최대값의 다음값에서 세로 최대값 이전의 가로값을 빼준것이 작은 사각형의 가로값 
    small1 = abs(total[maxhidx-1] - total[(maxhidx-5 if maxhidx == 5 else maxhidx +1)])
    
    small2 = abs(total[maxwidx-1] - total[(maxwidx-5 if maxwidx == 5 else maxwidx +1)])
    area = bigbox - (small1 * small2)
    print(area*K)