题意:
在决胜局中,Abwad决定和nbc鏖战字符串,比的是谁能更快地将一个“量子态的字符串”删除。“量子态的字符串”的每个字符都有一个删除难度dif[i]。“量子态的字符串”非常顽固,只能先分割成若干个子串,然后再通过以下两种方式删除:
1、假设子串的所有字符的删除难度之和为x,消耗a*x2+b的时间可以将子串扔进回收站。
2、若子串中出现次数最多的字符出现的次数不少于l次且不多于r次,那么采用“量子态的py自动机”算法可以消耗c*x+d的时间将子串扔进回收站。
Abwad自然知道最少用多少时间就能将字符串删去,因此,他希望你求出删去每个前缀[1,i]的最少用时。
对于所有的数据,满足n≤100000,1≤a,b,c,d≤233,1≤l,r≤n,dif[i]≤50,所有字符由小写字母组成。
思路:lyy题
老年选手犯了个大错误 DP没求完就在优化决策 结果只WA了1个点
要我说应该WA光 也许是数据难造
1 var dp:array[0..110000]of int64; 2 s:array[0..110000]of int64; 3 q1,q2,f:array[1..110000]of longint; 4 l,r:array[1..260]of longint; 5 n,a,b,c,d,l0,r0,i,x,nowl,nowr,t1,w1,t2,w2,t,j,k:longint; 6 ch:ansistring; 7 8 function cmp(x,y,z:longint):boolean; 9 var x1,y1,x2,y2:int64; 10 begin 11 x1:=sqr(s[x])*a-sqr(s[y])*a+dp[x]-dp[y]; 12 y1:=s[x]-s[y]; 13 x2:=sqr(s[y])*a-sqr(s[z])*a+dp[y]-dp[z]; 14 y2:=s[y]-s[z]; 15 if x1*y2>=x2*y1 then exit(true); 16 exit(false); 17 end; 18 19 function clac(j,i:longint):int64; 20 begin 21 exit(dp[j]+sqr(s[i]-s[j])*a+b); 22 end; 23 24 function min(x,y:int64):int64; 25 begin 26 if x<y then exit(x); 27 exit(y); 28 end; 29 30 begin 31 assign(input,'string.in'); reset(input); 32 assign(output,'string.out'); rewrite(output); 33 readln(n,a,b,c,d,l0,r0); 34 readln(ch); 35 for i:=1 to n do f[i]:=ord(ch[i])-ord('a')+1; 36 for i:=1 to n do 37 begin 38 read(x); s[i]:=s[i-1]+x; 39 end; 40 t1:=1; w1:=1; q1[1]:=0; dp[0]:=0; 41 t2:=1; w2:=0; 42 nowl:=1; nowr:=0; 43 for i:=1 to n do 44 begin 45 while (t1<w1)and(clac(q1[t1],i)>=clac(q1[t1+1],i)) do inc(t1); 46 dp[i]:=clac(q1[t1],i); 47 48 inc(l[f[i]]); inc(r[f[i]]); 49 while l[f[i]]>r0 do 50 begin 51 dec(l[f[nowl]]); 52 inc(nowl); 53 while (t2<=w2)and(q2[t2]+1<nowl) do inc(t2); 54 end; 55 while r[f[i]]>=l0 do 56 begin 57 if nowr>0 then 58 begin 59 dec(r[f[nowr]]); 60 if r[f[i]]<l0 then 61 begin 62 inc(r[f[nowr]]); 63 break; 64 end; 65 end; 66 while (t2<=w2)and(dp[nowr]-s[nowr]*c<=dp[q2[w2]]-s[q2[w2]]*c) do dec(w2); 67 inc(w2); q2[w2]:=nowr; 68 inc(nowr); 69 end; 70 if t2<=w2 then 71 begin 72 t:=q2[t2]; 73 dp[i]:=min(dp[i],dp[t]+(s[i]-s[t])*c+d); 74 end; 75 while (t1<w1)and cmp(q1[w1-1],q1[w1],i) do dec(w1); 76 inc(w1); q1[w1]:=i; 77 end; 78 for i:=1 to n do writeln(dp[i]); 79 close(input); 80 close(output); 81 end.
【后记】
在Abwad和nbc同时将最后一个子串删去时,一个带着黑色方框眼镜,方脸,穿着高腰裤的长者,乘着圣洁的祥云,飞进了YYHS的机房。
在他伟大的思想的启发下,Abwad和nbc终于放下了对名利的追逐,找到了人生的意义——吃吃吃。从此,他们过上了幸福快乐的生活……