第十四屆藍橋杯第一期模擬賽 python

專注的阿熊發表於2022-11-30

from re import L

n,m = map(int, input().split())

M = []

for _ in range(n):

    M.append(input())

ans = 0 # 計數 LQ三角形

# 定義函式,檢視是否是LQ三角形,一共有四種

# 因為一共有4個方向,兩兩相鄰的組合,一共是四種情況

def check(x,y,a,b,d):

    if d == 0:

        # _|的情況

        # x,y 為左頂點

        # a,b 為上頂點

        while x >= a and y <= b:

            if M[a][b] != M[x][y]: return False

            x -= 1

            y += 1

    elif d == 1:

        # |_的情況

        # x,y 為右頂點

        # a,b 為上頂點

        while x >= a and y >= b:

            if M[a][b] != M[x][y]: return False

            x -= 1

            y -= 1

    elif d == 2:

        # -|的情況

        # x,y 為左頂點

        # a,b 為下頂點

        while x <= a and y <= b:

            if M[a][b] != M[x][y]: return False

            x += 1

            y += 1

    elif d == 3:

        # |-的情況

        # x,y 為右頂點

        # a,b 為下頂點

        while x <= a and y >= b:

            if M[a][b] != M[x][y]: return False

            x += 1

            y -= 1

    return True

for i in range(n):

    for j in range(m):

        up,down,left,right = 0,0,0,0

        # 得到上下左右相等的最大的數,利用四個while迴圈

        while (i - up) >=跟單網gendan5.com 0 and M[i][j] == M[i-up][j]:

            up +=1

        while (i + down) < n and M[i][j] == M[i+down][j]:

            down +=1

        while (j - left) >= 0 and M[i][j] == M[i][j-left]:

            left +=1

        while (j + right) < m and M[i][j] == M[i][j+right]:

            right +=1

        # _|的情況

        for k in range(1,min(up,left)):

            # 左頂點座標(i,j-k),上頂點座標(i-k,j)

            if check(i,j-k,i-k,j,0):

                ans += 1

        # |_的情況

        for k in range(1,min(up,right)):

            # 右頂點座標(i,j+k),上頂點座標(i-k,j)

            if check(i,j+k,i-k,j,1):

                ans += 1

        # -|的情況

        for k in range(1,min(down,left)):

            if check(i,j-k,i+k,j,2):

                ans += 1

        # |-的情況

        for k in range(1,min(down,right)):

            if check(i,j+k,i+k,j,3):

                ans += 1

print(ans)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2926017/,如需轉載,請註明出處,否則將追究法律責任。

相關文章