Codeforces Round #322 C Developing Skills

来源:互联网 发布:淘宝手机十大黑店 编辑:程序博客网 时间:2024/05/21 10:30

题意:给你N个数,和k值,问你这N个数除以10的整数位的最大值,可以将k值给N个数,问你能得到的最大值,N个数+k的值不可以超过100,超过100则无效、

思路:模拟+贪心、 将n个数从小到大排,依次将k给出去就可以了、

AC代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100100;struct node{    int a;    int b;}msq[maxn];int n,k;long long sum;int cmd(struct node a,struct node b){    return a.b>b.b;}int main(){    while(scanf("%d %d",&n,&k)!=EOF){        sum=0;        for(int i=0;i<n;i++)            scanf("%d",&msq[i].a);        for(int i=0;i<n;i++){            msq[i].b=msq[i].a%10;            msq[i].a=msq[i].a/10;            sum+=msq[i].a;        }        sort(msq,msq+n,cmd);        for(int i=0;i<n;i++){            if(msq[i].a==10)                continue;            if(10-msq[i].b<=k){                k-=10-msq[i].b;                msq[i].a++;                sum++;            }        }        int z=0;k/=10;        for(int i=0;i<n;i++)            z+=10-msq[i].a;        if(z>=k)            sum+=k;        else            sum+=z;        printf("%I64d\n",sum);    }    return 0;}


0 0