鏖戰字串
題目描述
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...