8AC 2WA代码(正确的在后面)
#include<bits/stdc++.h>
using namespace std;
struct i
{
long long a,haoma,dengdai;
}c[1000+10];
bool cmp(i k,i l)
{
return k.a<l.a;
}
int main()
{
long long n;
cin>>n;
int sum=0;
for(int i=1;i<=n;i++)
{
cin>>c[i].a;
c[i].haoma=i;
}
int u=0;
sort(c+1,c+n+1,cmp);
for(int i=1;i<=n;i++)
{cout<<c[i].haoma<<" "; u++;
if(u==n) cout<<endl;
c[i].dengdai+=c[i-1].a+c[i-1].dengdai;
sum+=c[i].dengdai;
}
printf("%.2f",(double)sum/n);
return 0;
}
如果你这么写,就会踩进编者挖的坑里,因为累加器所累加的数值可能会超过int类型,要这样:
#include<bits/stdc++.h>
using namespace std;
struct i
{
long long a,haoma,dengdai;
}c[1000+10];
bool cmp(i k,i l)
{
return k.a<l.a;
}
int main()
{
long long n;
cin>>n;
long long sum=0;
for(int i=1;i<=n;i++)
{
cin>>c[i].a;
c[i].haoma=i;
}
int u=0;
sort(c+1,c+n+1,cmp);
for(int i=1;i<=n;i++)
{cout<<c[i].haoma<<" "; u++;
if(u==n) cout<<endl;
c[i].dengdai+=c[i-1].a+c[i-1].dengdai;
sum+=c[i].dengdai;
}
printf("%.2f",(double)sum/n);
return 0;
}