阿里的新天池任務(簡單版)

 

阿里「天池」競賽平臺近日推出了一個新的挑戰任務:對於給定的一串 DNA 鹼基序列 tt,判斷它在另外一個根據規則生成的 DNA 鹼基序列 ss中出現了多少次。python

其中 ∧ 表示「且」關係,∨ 表示「或」關係,a  mod}\ ba mod b 表示 aa 除以 bb 的餘數。app

現給定另外一個 DNA 鹼基序列 tt,以及生成 ss 的參數 n , a , b , L , Rn,a,b,L,R,求 tt 在 ss 中出現了多少次。spa

輸入格式

數據第一行爲 55 個整數,分別表明 n , a , b , L , Rn,a,b,L,R。第二行爲一個僅包含ATGC的一個序列 tt。code

數據保證 0 < a < n,0<a<n, 0 \le b < n,0≤b<n, 0 \le L \le R < n,0≤L≤R<n, |t| \le 10^{6}∣t∣≤10​6​​,a,na,n 互質。input

對於簡單版本,1 \leq n \leq 10^{6}1≤n≤10​6​​;it

對於中等版本,1 \leq n \leq 10^{9}, a = 11≤n≤10​9​​,a=1;class

對於困難版本,1 \leq n \leq 10^{9}1≤n≤10​9​​。import

輸出格式

輸出一個整數,爲 tt 在 ss 中出現的次數。im

樣例說明

對於第一組樣例,生成的 ss 爲TTTCGGAAAGGCC數據

樣例輸入1

13 2 5 4 9
AGG

樣例輸出1

1

樣例輸入2

103 51 0 40 60
ACTG

樣例輸出2

5
import re
arguments = [int(c) for c in raw_input().split(" ")]
pattern = raw_input()

n = arguments[0]
a = arguments[1]
b = arguments[2]
L = arguments[3]
R = arguments[4]

w = [b]

for i in range(1,n):
    w.append((w[i-1]+a)%n)


def generate_s(a,b,L,R):
    s = ""
    for i in range(n):
        if w[i] % 2 == 0:
            if  L <= w[i] <= R:
                s += "A"
            else:
                s += "G"
        else:
            if  L <= w[i] <= R:
                s += "T"
            else:
                s += "C"
    return s

ss = generate_s(a,b,L,R)

number = 0

while ss != "":
	if ss.find(pattern) != -1:
		number += 1
		s = s[s.find(pattern)+1:]
	else:
		break
相關文章
相關標籤/搜索