白駿16504折り紙


質問する


折り紙と数学が好きな周星伊は、折り紙と数学を同時に遊ぶゲームを見つけた.Nです×大きさNの色紙の各マスに数字を書き、色紙を二つ折りにするたびに重ねた部分の数字を加算します.そして、この仕事を折りたたむことができないまで繰り返すと、最後の残りの数を求めるゲームです.
以下の例では、上記のゲーム手順を2に設定します.×2サイズの色紙で詳細に表示される画像.
  • 色の紙を左から右に正確に半分に折ります.
  • 重複する2つの格子の数を加算します.上の図の(1,1)と(1,2)の2つのセルが重なり、(2,1)と(2,2)の2つのセルも重なる部分です.
  • さらに
  • をカラーペーパーに追加します.
  • 色の紙を下から上へ正確に折ります.
  • 重複する2つの格子の数を加算します.上の図は、(1、1)と(2、1)の2つのセルの重複部分です.
  • さらに
  • をカラーペーパーに追加します.
  • カラーペーパーペアを厚く折り曲げることを考慮せず、カラーペーパーを折り曲げることができなくなるまで以上の過程を繰り返した場合、最後に残った数を求める.
    入力
    第1行は、カラー紙の横方向および縦方向の長さを表す整数N(N=2^m、1≦m≦10)を与える.
    2行目から最後の行までN×nサイズのカラー紙情報が与えられ、カラー紙の各セグメントには整数K(1≦K≦100000)がある.
    しゅつりょく
    カラーペーパーを二つ折りにして、重ねた部分の数を増やす過程を繰り返すと、最後の残数が出力されます.
    入力例1
    4
    2 6 5 4
    1 5 7 6
    9 8 8 7
    1 4 7 8
    サンプル出力1
    88

    解法


    最初は2次元配列で値を入力し、複文でリストを半分に縮小すべきだと思っていましたが、後で考えてみましたが、そんな必要はありません.
    入力したNは2の繰返し平方形なので、色紙を折りたたむと最後に1マスしか残っていません.
    したがって、入力したすべての値を加算すると、結リンゴ値になります.

    コード#コード#

    import sys
    
    N = int(sys.stdin.readline())
    result = 0
    for _ in range(N):
        a = list(map(int, sys.stdin.readline().split()))
        result += sum(a)
    print(result)
    
    白駿16504折り紙