• CF 447B(DZY Loves Strings-贪心)


    B. DZY Loves Strings
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    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?

    Input

    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.

    Output

    Print a single integer — the largest possible value of the resulting string DZY could get.

    Sample test(s)
    input
    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
    
    output
    41
    
    Note

    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
    %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;
    }
    





  • 相关阅读:
    PCB 规则引擎之脚本语言JavaScript应用评测
    PCB 挺有意思的基数排序----C#代码实现
    PCB NOSQL MongoDb MI流程指示数据存储结构
    PCB javascript解析Gerber274X格式实现方法
    PCB javascript解析钻孔(Excellon)格式实现方法
    PCB 围绕CAM自动化,打造PCB规则引擎
    PCB Genesis拼SET画工艺边 实现方法(一)
    约瑟夫环的三种解法
    Microsoft edge真香!
    商城规格参数
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7071673.html
Copyright © 2020-2023  润新知