8 16模擬賽 玩具 dp 字串

2022-04-30 11:42:11 字數 1169 閱讀 4514

第一行乙個正整數\(n\),表示小皮有\(n\)個玩具

接來下一行乙個由小寫字母構成的字串,表示初始的玩具序列。

接來下一行乙個正整數\(q\), 表示小皮的\(q\)種需求

接下來\(q\)行,每行輸入二元組\((x,y)\),含義如題目描述所述

輸出一共\(q\)行,表示每組詢問的答案

5aabaa

2a 1

b 25

3對於第一組詢問,我們可以把\(b\)替換為\(a\),那麼連續為\(a\)的最長序列長度為5

對於第二組詢問,我們可以把與\(b\)相鄰的兩個\(a\)替換為\(b\),那麼連續為\(b\)的最長序列長度為3

對於 10% 的資料:\(n,q<=10\)

對於 30% 的資料:\(n,q<=100\)

對於另外20%的資料:只存在\(a,b\)兩種字元

對於100%的資料:\(n<=2000,q<=3*10^5,1<=y<=n\)

保證所有出現的字元都是小寫字母.

對於這道題,可以發現n的範圍是可以接受\(n^2\)的,而q比較大,如果再套個什麼東西很容t掉,所以我們選擇在外面預處理,dp求出\(dp[i][j]\)表示把原串\(i\)個字元替換為\(j\)的最大長度

實現:\(n^2\)列舉每個子串,再在外面套乙個列舉字母的迴圈,複雜度\(o(26*n^2)\)

所以總複雜度\(o(26*n^2+q)\)

#include#define max(a,b) ((a)>(b)?(a):(b))

#define in(i) (i=read())

using namespace std;

inline int read()

while(i>='0' && i<='9')

return ans*f;

}int n,m;

int dp[2010][30];

char s[2010];

void init()

for(int k=1;k<=n;k++) if(dp[k-1][i]>dp[k][i]) dp[k][i]=dp[k-1][i];//這裡注意一下,因為題目要求替換的數量可能會大於需要替換的字元數量,比如樣例中只有乙個b,單若是題目要求替換兩個a的沒有這個更新就會wa}}

}int main()

}

字串模擬

現在有一些被簡單壓縮的字串,例如 a 120 代表120個a。對於字串acb 3 d 5 e相對於acbbbddddde 現在給你兩個字串cstring,nstring.乙個是被壓縮過的字串,另乙個沒有被壓縮。求nstring是否為cstring的子串,如果是輸出true,否則輸出false.cst...

字串 模擬

description submit statistics discussion 2.0 seconds 256 megabytes 易位構詞 anagram 指將乙個單詞中的字母重新排列,原單詞中的每個字母都出現有且僅有一次。例如 unce 可以被易位構詞成 ecnu 在某些情況下,要求重排而成的...

FJ的字串 字串模擬

description fj在沙盤上寫了這樣一些字串 a1 a a2 aba a3 abacaba a4 abacabadabacaba 你能找出其中的規律並寫所有的數列an嗎?input 僅有乙個數 n 26。output 請輸出相應的字串an,以乙個換行符結束。輸出中不得含有多餘的空格或換行 回...