注册 登录
编程论坛 C++教室

一道简单的中南大学研究生复试机试题求解

Xpj 发布于 2019-06-23 16:01, 1689 次点击
答案错误50%我那种情况没想到能告知一下吗?


1208: 选球问题
时间限制: 1 Sec  内存限制: 128 MB
提交: 77  解决: 18
[提交] [状态] [讨论版] [命题人:test]

题目描述
PIPI现有a-z共26种球,权值从a到z依次为1,2,3...26,现从已有的n个球中选出固定k个从左到右排列,要求右边的球权值至少比左边大2,在给定n和k的情况下,求最小权重和。

输入
输入包含多组数据。
每组数据第一行包含两个整数 n,k (1<=k<=n<=50)
第二行是一个长度为n的字符串。

输出
对于每组样例,输出最小权重和。若不存在输出-1.

样例输入
5 3
xyabd

样例输出
29

来源/分类
2019年中南大学研究生复试机试题  


我的代码:
#include<iostream>
#include<string>
#include<algorithm>
//1 2 4 24 25
using namespace std;
int main(){
    int n,i,s,k,t,p;
    string str;
    int a[51]={0};
    while(cin>>k>>n){
        if(k>n){
            t=k;
            k=n;
            n=t;
        }
        s=0;
        p=0;
        cin>>str;
        for(i=0;i<n;i++)
            a[i]=str[i]-'0'-48;
        sort(a,a+n);
        s+=a[0];
        if(n==1)
            p=1;
        for(i=1;i<n;i++){
            if(a[i]-a[0]>2){
                a[0]=a[i];
                s+=a[i];
                p=1;
            }
        }
        if(p)
            cout<<s<<endl;
        else
            cout<<"-1"<<endl;
    }
    return 0;
}
1 回复
#2
rjsp2019-06-24 08:52
不要重复发帖 https://bbs.bccn.net/thread-495443-1-1.html

str[i]-'0'-48 是什么意思?
a[i]-a[0]>2 不是说“至少比左边大2”吗,你这是至少大3了吧
另外,k 根本就没用到吧
1