第三届山西省程序设计大赛:灰哥的烦恼

第三届山西省程序设计大赛
灰哥的烦恼
时间限制: C/C++ 1000ms; Java 2000ms 内存限制: 65535KB

问题描述
作为上兰帝国ACM中的首席外交官,灰哥可谓是圈内dalao,每日处理各种复杂的外交事务,为了更好的和圈内其他dalao谈笑风生,灰哥加入了很多蒟(菊)蒻(苣)群,但由于群的数量太多,灰哥不能很快的答复信息,于是灰哥准备将各个群设定一个等级分,每个群的等级分互不相同。
但是灰哥的这个决定被很多群主得知,所以每个群主纷纷要求灰哥将自己的群的等级分提升到某个数值或某个数值以上,即第i个群主要求第i个群的等级分最少为a[i].灰哥非常苦恼,他不想等级分的总和超过k。他想要知道是否存在一种方案,能满足大家的需求。

输入描述
输入包括两行
第一行两个数n(1<=n<=1e6),k(1<=k<=1e9),n代表群的总数,k代表等级分总和的最大值
第二行有n个数,第i个数a[i]表示第i个群的最低等级分(1<=a[i]<=1e9)
输出描述
如果存在满足的组合请输出最小的等级分和,否则输出“Dalao de yao qiu tai gao le , QAQ”(不包括引号)。
样例输入
3 10
1 1 1
样例输出
6
来源
第三届山西省大学生程序设计大赛
提示
三个群要求的最低等级都是一,且群主们要求各自等级互不相等,所以分别定义三个群的等级为1,2,3即可,总和为6.

注意数据范围 AC代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1000000+10;
int a[maxn];
int main()
{
    int n,k;
    long long minn=0;
    long long ans=0;
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    sort(a,a+n);
    for(int i=0;i<n;i++)
    {
     if(a[i]>minn)
     {
          ans+=a[i];
          minn=a[i];
     }
     else if(a[i]<=minn)
     {           
          minn++;
          ans+=minn;      
     }
     //cout<<ans<<endl;
    }
    if(ans<=k)
    printf("%lld\n",ans)  ;
    else
    printf("Dalao de yao qiu tai gao le , QAQ\n");
    //system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值