1. 程式人生 > 其它 >藍橋杯:三升排序——————Python

藍橋杯:三升排序——————Python

技術標籤:藍橋杯python

題目
試題 A: 三升序列
本題總分:5 分

【問題描述】
對於一個字母矩陣,我們稱矩陣中的一個三升序列是指在矩陣中找到三個字母,它們在同一行,同一列,或者在同一 45 度的斜線上,這三個字母從左向右看、或者從上向下看是遞增的。

例如,如下矩陣中

YQPD
BKEZ
AFYV

有BKZ、BEZ、AFY、AFV、AKP、DEF 等 6 個三升序列。注意當三個字母是從左下到右上排列時,從左向右看和從上向下看是不同的順序。

對於下面的 30 行 50 列的矩陣,請問總共有多少個三升序列?(如果你把以下文字複製到文字檔案中,請務必檢查複製的內容是否與文件中的一致。在試題目錄下有一個檔案 inc.txt,內容與下面的文字相同)

VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG
SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF
ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA
BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL
YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH
ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU
XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR
ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG
MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA
VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF
GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC
EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK
PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW
CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP
RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS
PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR
JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL
YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP
HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN
DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF
LXYPCv*nUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW
CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ
IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI
ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB
HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP
FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS
VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ
BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR
RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY
ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX

【答案提交】
這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。


解題思路

  • 直接暴力解就完事了。

Code

#三升排序
content = []
with open('inc.txt') as fp:
    for line in fp.readlines():
        content.append(list(line.strip()))
#print(content)
res,dic = 0,[(-1,1),(0,1),(1,1),(1,0),(1,-1)]
for i in range(len(content)
): for j in range(len(content[i])): letter = content[i][j] for a,b in dic: c,d = i,j while True: c += a d += b c1,d1 = c,d if c < 0 or d < 0 or c >= len(content) or d >= len(content[c]): break while True: c1 += a d1 += b if c1 < 0 or d1 < 0 or c1 >= len(content) or d1 >= len(content[c]): break if content[i][j] < content[c][d] < content[c1][d1]: res += 1 print(res) 180414