CF 447B(DZY Loves Strings-贪心)
1 second
256 megabytes
standard input
standard output
DZY loves collecting special strings which only contain lowercase letters. For each lowercase letter c DZY knows its value wc.
For each special string s = s1s2... s|s| (|s| is
the length of the string) he represents its value with a function f(s), where
Now DZY has a string s. He wants to insert k lowercase
letters into this string in order to get the largest possible value of the resulting string. Can you help him calculate the largest possible value he could get?
The first line contains a single string s (1 ≤ |s| ≤ 103).
The second line contains a single integer k (0 ≤ k ≤ 103).
The third line contains twenty-six integers from wa to wz.
Each such number is non-negative and doesn't exceed 1000.
Print a single integer — the largest possible value of the resulting string DZY could get.
abc
3
1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
41
In the test sample DZY can obtain "abcbbc", value = 1·1 + 2·2 + 3·2 + 4·2 + 5·2 + 6·2 = 41.
贪心,不难想到取最大的w扔在末尾
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (1000+10)
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
typedef long long ll;
char s[MAXN];
int k,w[MAXN];
int main()
{
// freopen("Strings.in","r",stdin);
// freopen(".out","w",stdout); scanf("%s\n%d",s+1,&k); int len=strlen(s+1); int p=0;
Fork(i,'a','z') cin>>w[i],p=max(p,w[i]); ll ans=0;
For(i,len) ans+=w[s[i]]*i; if (k) ans+=(len+1+len+k)*k/2*p; cout<<ans<<endl; return 0;
}
最新文章
- Windows Server 2008 小操作汇总
- sql server 游标 写给自己
- ViewPager中使用PhotoView时出现pointerIndex out of range异常
- NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
- Qt浅谈之四十五QSplitter实现自由伸缩滑动窗口
- NOI2013 Day1
- linux学习:wget与lynx用法整理
- gcc8.2安装
- .NET开发微信公众号之创建自定义菜单
- 第 5 章 网络 - 032 - 学容器必须懂 bridge 网络
- SpringMVC学习八 @ResponseBody注解
- jQuery中click(),bind(),live()的区别(转)
- 【转】关于 SELECT /*!40001 SQL_NO_CACHE */ * FROM 的解惑
- redis.windows.conf 参数说明
- pandas数据结构:Series/DataFrame;python函数:range/arange
- Extjs学习笔记--(四,基本函数介绍)
- Django学习笔记之Queryset的高效使用
- YBT 5.4 状态压缩动态规划
- (译)Getting Started——1.2.3 Defining the Interaction(定义交互)
- presentModalViewController方法,present一个透明的viewController,带动画效果
热门文章
- __FUNCTION__, __LINE__ 有助于debug的宏定义
- USACO holstein 超时代码
- Codeforces Round #338 (Div. 2) B. Longtail Hedgehog 记忆化搜索/树DP
- 0x36 组合计数
- mysql学习 2
- C++逐行读取文本文件的正确做法
- 转:Hibernate中Criteria和DetachedCriteria的完整用法
- WebApp开发技巧大全
- 用一个小的例子来说明为什么TCP采用三次握手才能保证连接成功
- ZBrush中Local模式的旋转