题意:给你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;
}