PAT 1040 有幾個PAT python (無超時)
阿新 • • 發佈:2019-01-31
1040 有幾個PAT(25)(25 分)
字串APPAPT中包含了兩個單詞“PAT”,其中第一個PAT是第2位(P),第4位(A),第6位(T);第二個PAT是第3位(P),第4位(A),第6位(T)。
現給定字串,問一共可以形成多少個PAT?
輸入格式:
輸入只有一行,包含一個字串,長度不超過10^5^,只包含P、A、T三種字母。
輸出格式:
在一行中輸出給定字串中包含多少個PAT。由於結果可能比較大,只輸出對1000000007取餘數的結果。
輸入樣例:
APPAPT
輸出樣例:
2
作者: CAO, Peng
單位: PAT聯盟
時間限制: 120ms
記憶體限制: 64MB
程式碼長度限制: 16KB
問題分析:
這題打眼一看,說是要 “對1000000007取餘數”,這計算量肯定不小
(可達鴨眉頭一皺,發現事情並不簡單)
常規思路
程式碼:
n = input()
count = 0
for i in range(len(n)):
if n[i] == 'P':
for j in range(i + 1, len(n)):
if n[j] == 'A':
for x in range(j + 1, len(n)):
if n[x] == 'T':
count += 1
print(count % 1000000007)
果然後三個節點超時,然而以博主的智商,實在不知道怎麼怎麼優化演算法
有幸翻到大佬的微博:
https://blog.csdn.net/ice_camel/article/details/44263451
但是有一點不是很明白,不知道為什麼大佬要從後往前讀字串,這點稍微有所修改,也可通過
改進程式碼:
n = input()
count_P = 0
count_PA = 0
count_PAT = 0
for i in n:
if 'P' == i:
count_P += 1
elif 'A' == i:
count_PA += count_P
else :
count_PAT += count_PA
print(count_PAT % 1000000007)