Codeforces1011A Stages【模拟】

A. Stages

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Natasha is going to fly to Mars. She needs to build a rocket, which consists of several stages in some order. Each of the stages is defined by a lowercase Latin letter. This way, the rocket can be described by the string — concatenation of letters, which correspond to the stages.

There are nn stages available. The rocket must contain exactly kk of them. Stages in the rocket should be ordered by their weight. So, after the stage with some letter can go only stage with a letter, which is at least two positions after in the alphabet (skipping one letter in between, or even more). For example, after letter 'c' can't go letters 'a', 'b', 'c' and 'd', but can go letters 'e', 'f', ..., 'z'.

For the rocket to fly as far as possible, its weight should be minimal. The weight of the rocket is equal to the sum of the weights of its stages. The weight of the stage is the number of its letter in the alphabet. For example, the stage 'a 'weighs one ton,' b'weighs two tons, and' z' — 2626 tons.

Build the rocket with the minimal weight or determine, that it is impossible to build a rocket at all. Each stage can be used at most once.

Input

The first line of input contains two integers — nn and kk (1≤k≤n≤501≤k≤n≤50) – the number of available stages and the number of stages to use in the rocket.

The second line contains string ss, which consists of exactly nn lowercase Latin letters. Each letter defines a new stage, which can be used to build the rocket. Each stage can be used at most once.

Output

Print a single integer — the minimal total weight of the rocket or -1, if it is impossible to build the rocket at all.

Examples

input

Copy

5 3
xyabd

output

Copy

29

input

Copy

7 4
problem

output

Copy

34

input

Copy

2 2
ab

output

Copy

-1

input

Copy

12 1
abaabbaaabbb

output

Copy

1

Note

In the first example, the following rockets satisfy the condition:

  • "adx" (weight is 1+4+24=291+4+24=29);
  • "ady" (weight is 1+4+25=301+4+25=30);
  • "bdx" (weight is 2+4+24=302+4+24=30);
  • "bdy" (weight is 2+4+25=312+4+25=31).

Rocket "adx" has the minimal weight, so the answer is 2929.

In the second example, target rocket is "belo". Its weight is 2+5+12+15=342+5+12+15=34.

In the third example, n=k=2n=k=2, so the rocket must have both stages: 'a' and 'b'. This rocket doesn't satisfy the condition, because these letters are adjacent in the alphabet. Answer is -1.

题意:将输入的字符串从小 到大选取k个,不能选取相邻的,每个 最多选取一次,a为1,b2~~z 为26,输出最小的和,若不存在输出-1

思路:(1)将输入的字符串减去96换成整形数组,相同的不要,sort从小到大排序,找出前k个不相邻的数相加,注意 若两个                         数 相邻时前一个数是否选取了。

          (2)若不存在输出-1

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int a[60];
int main()
{
    int n,m,ans=0,t=0;
    char c;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        cin>>c;
        a[i]=c-96;
        for(int j=1;j<i;j++)
        {
            if(a[i]==a[j])
            {
                i--;
                n--;
            }
        }
    }
    a[0]=-1;
    sort(a+1,a+1+n);
    if(n<m)
    {
        printf("%d\n",-1);
        return 0;
    }
    int pre=-1;
    for(int i=1;i<=n;i++)
    {

        if(((a[i]-a[i-1])==1)&&(pre==a[i-1]))///细节重点
        {
            continue;
        }
        else
        {
            ans+=a[i];
            pre=a[i];///注意此处进行判断若是相邻数前一个是否选取了
            t++;
        }
        if(t==m) break;
    }
    if(t==m) printf("%d\n",ans);
    else printf("%d\n",-1);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会敲代码的小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值