这题错的更是离谱,我想的好好的,然后代码敲上去,然后交了,竟然可以暂时通过,我也是醉了,而且过了
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 long
using 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 long
using 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;
}