阿里「天池」競賽平台近日推出了乙個新的挑戰任務:對於給定的一串 dna 鹼基序列 t
t,判斷它在另乙個根據規則生成的 dna 鹼基序列 s
s中出現了多少次。
首先,定義乙個序列 ww:
\displaystyle w_ = =⎧
⎩⎨⎪⎪
⎪⎪⎪⎪
a,t,
g,c,
(l≤w
i≤r)
∧(wi
mod2
=0)(
l≤wi
≤r)∧
(wim
od2=
1)((
wi∨(wi
>r)
)∧(w
imod
2=0)
((wi
∨(wi
>r)
)∧(w
imod
2=1)
\ bamo
db表示 a
a 除以 b
b 的餘數。
現給定另乙個 dna 鹼基序列 t
t,以及生成 s
s 的引數 n , a , b , l , rn,
a,b,
l,r,求 t
t 在 s
s 中出現了多少次。
資料第一行為 5
5 個整數,分別代表 n , a , b , l , rn,
a,b,
l,r。第二行為乙個僅包含a
、t
、g
、c
的乙個序列 tt。
資料保證 0 < a < n,
0<
a0 \le b < n,0≤
b0 \le l \le r < n,0≤
l≤r|t| \le 10^∣t
∣≤10
6
,a,na,
n 互質。
對於簡單版本,1 \leq n \leq 10^1≤
n≤10
6
;對於中等版本,1 \leq n \leq 10^, a = 11≤
n≤10
9
,a=1
;對於困難版本,1 \leq n \leq 10^1≤
n≤10
9
。輸出乙個整數,為 t
t 在 s
s 中出現的次數。
對於第一組樣例,生成的 s
s 為tttcggaaaggcc
。
樣例輸入1
13 2 5 4 9agg
樣例輸出1
1
樣例輸入2
103 51 0 40 60actg
樣例輸出2
5模擬一遍題意 進行kmp演算法 統計個數即可
#include #include #include #include #include using namespace std;
const int max_n = 1e6+5;
int next[max_n];
char mo[max_n];
char str[max_n];
int w[max_n];
int n2,n1;
void getnext()
else if(w[i]%2==0)
}else if(w[i]r)
else if(w[i]%2==1)}}
next[0]=-1;
getnext();
printf("%d\n",kmp());
return 0;
}
計蒜客 阿里的新遊戲
阿里九遊開放平台近日上架了一款新的益智類遊戲 成三棋。成三棋是我國非常古老的乙個雙人棋類遊戲,其棋盤如下圖所示 如果一條線段上的三個交叉點都被同一玩家的棋子佔據的話,則稱這條線段被該玩家 成三。現在,小紅和小明兩人在遊戲平台上下棋,其中小紅的棋子是黑色的。請你幫小紅計算他成三的線段數。樣例對應的棋盤...
計蒜客 2019計蒜之道D
題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...
計蒜客 解碼
蒜頭君自己發明了一種字串的編碼方式,對於只含有大小寫字母的字串,可以用數字來表示括號裡面的串連續出現的次數 數字有可能超過一位數 比如a abcd 2等價於aabcdabcd。特別地,如果數字前面沒有括號,表示緊貼數字的前面的 乙個字母 出現的次數。比如abc2表示abcc。為了降低解碼的難度,蒜頭...