8 16考試 玩具

2022-05-19 19:03:14 字數 1127 閱讀 2173

兒時的玩具總是使我們留戀,當小皮還是個孩子的時候,對玩具更是情有獨鍾。小皮是乙個興趣愛好相當廣泛且不專一的人,這這讓老皮非常地煩惱。也就是說,小皮在不同時刻所想玩的玩具總是會不同,而有心的老皮也會盡量

滿足他的要求,幫他買一些新玩具。

一開始小皮有乙個長度為n的玩具序列 , 小皮的玩具可以用小寫字母a,b,c,...,z表示。小皮可能會有q種需求每種需求用乙個二元組(x,y)表示,代表小皮在此時最喜歡x這種玩具,他希望老皮幫他買回y個玩具x,

小皮希望知道假如用這y個玩具去**替換原來的玩具**,最多可以產生多長的連續為x的這種玩具序列。

### 輸入格式

第一行乙個整數n,代表小皮有n個玩具。

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

接下來乙個整數q,代表小皮有q種需求。

接下來q行,每一行乙個二元組(x,y)。

### 輸出格式

q行,每一行乙個答案。

### 樣例輸入

5aabaa

2a 1

b 2### 樣例輸出53

### 資料範圍:$$n<=2000,q<=3*10^5,1<=y<=n$$

## solution

n<=2000,可以想到可能是o($n^2$) 的演算法。o($n*q$)發現是過不了的,

所以我們想到離線去做。設$f[i][j]$代表從1到i全部變成字母j需要用多少次。$ff[i][j]$代表用i次操作把字母j變成的連續序列最長的長度是多長。

我們只需輸出$ff[i][j]$就可以了。然後我們想怎麼得出$ff$陣列就行了。

我們先跑一遍,把f陣列處理出來,接下來列舉左右端點,處理出ff陣列

。可以發現需要遞推ff陣列

$$ff[i][j]=max(ff[i][j],ff[i-1][j]+1)$$

**如下

```cpp

#include#include#include#includeusing namespace std;

int f[2010][30],ff[2010][30],mx[20100];

char s[201010];

int main()

//cout<>q;

for(int i=1;i<=q;i++) }

```

8 16考試 小皮的疑惑

偉大的哲學家小皮認為,友誼是具有傳遞性的 如果a和b存在一定的關係,b和c具有一定的關係,那麼a和c之間也會有一定聯絡。小皮喜歡研究他人的朋友圈,在他看來不滿足上述關係的朋友圈都是不正常的朋友圈,可是人多起來關係也摸不清,請你來幫忙寫乙個程式檢查該朋友圈是否正常.假設乙個朋友圈有n個人,m組關係,你...

C primer學習筆記8 16

1 識別符號 使用者自定義的識別符號不能以兩個連續的下劃線開頭,不能以下劃線加大寫字母開頭,識別符號不能以數字開頭 定義在函式體外的識別符號不能以下劃線開頭 變數名一般用小寫字母,使用者自定義的類以大寫字母開頭 2 作用域 名字的有效區域始於名字的宣告語句,以宣告語句所在的作用域末端為結束 全域性作...

藍橋杯 8 16複習

字串轉化字元陣列char 陣列名 字串名.tochararray 以逗號為分界將字串存入字串 整數陣列 只做arr到brr的轉換就是存入string 陣列 scanner sc newscanner system.in string arr sc.nextline string brr arr.sp...