キャンディゲーム


白駿3085

  • 最初はN×砂糖をnサイズのところに入れる.キャンディの色が違うかもしれません.
  • 上のルートは、隣接する2つのキャンディの色の異なる格子を選択します.それから均一な四角い格子の中のキャンディを交換します.
  • 現在、すべての人が同じ色からなる最長の連続部分(行または列)を選択し、すべてのキャンディを食べ尽くしています.
  • 個の糖を充填した後、尚根が食べられる最も大きな糖数を求めるプログラムを作成してください.
  • の第1行は、プレートのサイズNを与える.(3 ≤ N ≤ 50)
  • の次のN行は、板紙に充填されたキャンディの色を与える.赤はC、青はP、緑はZ、黄色はYです.
  • 2つの隣接する2つの異なる色のキャンディの入力のみが与えられる.
  • の1行目には、食べられるキャンディの最大個数が出力される.
  • にゅうしゅつりょく


    入出力3 CCPCPCPPPC 34 PPPPPPCZYCCPPC 45 YCPZYCPCPPPYCYCCPPZ 4

    方法


    :

    知るところ

  • はそれぞれ自分と右下を変えた.
  • 行交換、
  • 列交換
  • で交換された回路基板上で、行、列ごとに連続する最大数も計算される.
  • 板を元の場所に戻します.
  • 問題の条件に従って「やればいい」

    注意事項


    値の比較にmax関数を使用し、タイムアウトしました.
    if文で直接比較します.

    コード#コード#

    import sys
    
    n = int(sys.stdin.readline())
    board = [list(sys.stdin.readline()) for _ in range(n)]
    
    def check(board):
        ans = 1
        # 열 순회
        for i in range(n):
            cnt = 1
            for j in range(n-1):
                if board[i][j] == board[i][j+1]:
                    cnt += 1
                else:
                    cnt = 1
                if cnt > ans:
                    ans = cnt
    
            # 행 순회
            cnt = 1
            for j in range(n-1):
                if board[j][i] == board[j+1][i]:
                    cnt += 1
                else:
                    cnt = 1
                if cnt > ans:
                    ans = cnt
        return ans
    
    answer = 0
    for i in range(n):
        for j in range(n):
            # 행 바꾸기
            if i+1 < n:
                board[i][j], board[i+1][j] = board[i+1][j], board[i][j]
                tmp = check(board)
                if tmp > answer:
                    answer = tmp
                board[i][j], board[i+1][j] = board[i+1][j], board[i][j]
    
            # 열 바꾸기
            if j+1 < n:
                board[i][j], board[i][j+1] = board[i][j+1], board[i][j]
                tmp = check(board)
                if tmp > answer:
                    answer = tmp
                board[i][j], board[i][j+1] = board[i][j+1], board[i][j]
    
    print(answer)