AcWing 4792. 最大价值
原题链接
中等
作者:
Coinisi.
,
2023-01-07 20:17:06
,
所有人可见
,
阅读 145
// 插入最大的就行了
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#define IOS std::ios::sync_with_stdio(false)
#define inf 0x3f3f3f3f
#define YES cout << "YES" << endl
#define NO cout << "NO" << endl
#define int long long
#define x first
#define y second
//#define cmp [&](PII a, PII b){ return a.y < b.y; }
const int N = 5e5+10, mod = 1e9+7, M = 1e6+5, K = 1e5+10, Z = 2e5+7;
using namespace std;
typedef long long LL;
typedef priority_queue<int> PQI;
typedef priority_queue <int, vector<int>, greater<>> PQGI;
typedef pair<int, int> PII;
char ch[1010];
int k, w[27];
int sum;
int get_max()
{
int st = 0, idx = 0;
for(int i = 1; i <= 26; i ++)
if(w[i] > st) st = w[i], idx = i;
return idx;
}
void solve()
{
cin >> (ch + 1) >> k;
for(int i = 1; i <= 26; i ++) cin >> w[i];
int t = strlen(ch + 1);
int max_26 = get_max();
for(int i = 1; i <= t; i ++)
sum = sum + i * w[(ch[i] - 'a' + 1)];
for(int i = t + 1; i <= t + k; i ++)
sum = sum + i * w[max_26];
cout << sum << endl;
return;
}
signed main()
{
IOS; int T = 1;
// cin >> T;
while( T -- ) solve();
return 0;
}