CF581C用k去把n个数补成十的整数倍求最大

来源:互联网 发布:淘宝怎么修改好评价 编辑:程序博客网 时间:2024/06/10 21:08

这题错的更是离谱,我想的好好的,然后代码敲上去,然后交了,竟然可以暂时通过,我也是醉了,而且过了

20组数据,然后看了下我WA的代码,我cmp都写好了,竟然忘记sort一下了,一口鲜血吐出,加了一个sort分分钟

AC,而且记得交之前我还看了下代码,竟然没发现我写的cmp没有用,这题就是先按照把每个数不成十的倍数需要

的大小去排序,然后再从第一个数开始补,补齐的就加上这个补齐后的数字处于十,如果k能用完,剩下的数字,就

直接除于10就行了,不过k没能用完,然后再统计每个数都补成100一共需要多少值,如果剩下的k大于这个值就是这个值

除于10,如果不能就是k处于十,D题错的离谱,C题错的更离谱,啊,我的rating,如果上天再给我一个机会,我一定更加

认真。

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<algorithm>#include<vector>#include<set>#include<map>#include<cmath>#include<cctype>#include<queue>#define LL long longusing namespace std;const double eps=1e-10;const double pi=acos(-1.0);const int N=1e5+10;struct node{    int va;    int ca;}a[N];int cmp(node a,node b){    return a.ca<b.ca;}int main(){    int n,k;    while(cin>>n)    {       cin>>k;       for(int i=0;i<n;i++)       {           cin>>a[i].va;           if(a[i].va%10)           {               a[i].ca=(a[i].va/10+1)*10-a[i].va;           }           else            a[i].ca=0;       }       sort(a,a+n,cmp);       int sum=0;       int i;       for(i=0;i<n;i++)       {           if(k>=a[i].ca)           {               sum=sum+(a[i].va+a[i].ca)/10;               k-=a[i].ca;           }           else            break;       }       if(i!=n)       {           for(;i<n;i++)            sum+=a[i].va/10;           cout<<sum<<endl;       }       else       {           int temp=0;           for(int i=0;i<n;i++)            temp=temp+100-a[i].va-a[i].ca;           if(k>=temp)            cout<<sum+temp/10<<endl;           else            cout<<sum+k/10<<endl;       }    }    return 0;}
当然我比较喜欢简介的代码,这题代码还可以更简洁:

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<algorithm>#include<vector>#include<set>#include<map>#include<cmath>#include<cctype>#include<queue>#define LL long longusing namespace std;const double eps=1e-10;const double pi=acos(-1.0);const int N=1e5+10;int a[N];int main(){    int n,k;    while(cin>>n)    {       cin>>k;       int sum=0;       for(int i=0;i<n;i++)       {          cin>>a[i];          sum+=a[i]/10;          a[i]%=10;       }       sort(a,a+n);       reverse(a,a+n);       for(int i=0;i<n;i++)       {           if(10-a[i]<=k)           {               sum++;               k-=(10-a[i]);           }       }       cout<<min(n*10,sum+k/10)<<endl;    }    return 0;}



0 0