鏖戰字串

2021-08-08 12:37:04 字數 1459 閱讀 8170

鏖戰字串

題目描述

abwad在nbc即將完成她的程式的時候,急中生智拔掉了她電腦的電源線,爭取到了寶貴的時間。作為著名**《論ctrl-c與ctrl-v在資訊學競賽中的應用》的作者,他巧妙地使用了這種上古秘術,順利扳回一城。

在決勝局中,abwad決定和nbc鏖戰字串,比的是誰能更快地將乙個「量子態的字串」刪除。「量子態的字串」的每個字元都有乙個刪除難度dif[i]。「量子態的字串」非常頑固,只能先分割成若干個子串,然後再通過以下兩種方式刪除:

1、假設子串的所有字元的刪除難度之和為x,消耗a*x2+b的時間可以將子串扔進**站。

2、若子串中出現次數最多的字元出現的次數不少於l次且不多於r次,那麼採用「量子態的py自動機」演算法可以消耗c*x+d的時間將子串扔進**站。

abwad自然知道最少用多少時間就能將字串刪去,因此,他希望你求出刪去每個字首[1,i]的最少用時。

輸入 第一行七個整數n,a,b,c,d,l,r,其中n表示字串的長度

第二行一行乙個長度為n的字串

第三行一行n個整數,表示每個字元的刪除難度dif[i]

輸出 n行,每行乙個整數ans,表示刪去字首[1,i]最短的時間

樣例輸入

5 1 3 1 5 1 1

abwad

1 1 1 1 1

樣例輸出

4 7

8 12

13 提示

【樣例解釋】

以字首[1,n]為例,將串分為a、bwad兩個子串,用方法1刪去第乙個子串,用方法2刪去第二個子串,用時1*1+3+1*4+5=13第一

種方式斜

率優化

第二種方

式線掃是

否可行,

再用優先

佇列維護

#include

#include

#include

using namespace std;

#define ll long long

#define m 500010

int a,h[m],h[m],cntl[110],cntr[110];

ll s[m],dp[m];

char s[m];

int calc(int j,int k,int i)

ll read()

int main()

}while (l<=r&&dp[nowr]-s[nowr]*c

<=dp[h[r]]-s[h[r]]*c)r--;

h[++r]=nowr;

nowr++;

}if (l<=r)dp[i]=min(dp[i],dp[h[l]]+(s[i]-s[h[l]])*c+d);

while (l1],h[r],i))r--;

h[++r]=i;

printf("%lld\n",dp[i]);

}}

鏖戰字串

題目描述 abwad在nbc即將完成她的程式的時候,急中生智拔掉了她電腦的電源線,爭取到了寶貴的時間。作為著名 論ctrl c與ctrl v在資訊學競賽中的應用 的作者,他巧妙地使用了這種上古秘術,順利扳回一城。在決勝局中,abwad決定和nbc鏖戰字串,比的是誰能更快地將乙個 量子態的字串 刪除。...

ORACLE in 字串,字串,字串

因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...