算法競賽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;
}