算法竞赛2021 ICPC Southeastern Europe Regional Contest_Pay Respects
//#include "stdafx.h"
#include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
int N=10, X=1, R=10, P=40, K=1;
char str[1010000]={1,1,1,1, 1, 1,1,1,1, 1 };
char vis[1010000];
long long sum=0;
priority_queue<pair<long long, int>> a;
int main(){
scanf("%d",&N);
scanf("%d",&X);
scanf("%d",&R);
scanf("%d",&P);
scanf("%d",&K);
scanf("%s",str); // */
int x;
long long cos;
for( x=1;x<=N;x++)
{
if(str[x-1]=='1')cos=(N-(long long)x+1)*(P+R);
else cos=(N-(long long)x+1)*P;
a.push(pair<long long, int>(cos,x));
}
while (K)
{
//printf("%d\n", a.top().first );
vis[a.top().second-1]= 1;
a.pop();
K--;
}
long long val;
if(vis[0]) val=X+P;
else if(str[0]=='1')val=X-R;
else val=X;
sum+=val;
for( x=2;x<=N;x++)
{
if(vis[x-1])
val+=P;
else if(str[x-1]=='1')val-=R;
sum+=val;
}
printf("%lld\n",sum);
return 0;
}