简单贪心,用结构体即可,但是第一个代码AC不了。。。
(好了发现了,我是SB),有个10应该写成n
这下AC了
#include<bits/stdc++.h>
using namespace std;
struct Node{
int m;
int t;
}a[1001];
bool cmp(Node a,Node b){
return a.t<b.t;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].t;
a[i].m=i;
}
sort(a+1,a+n+1,cmp);
double sum=0;
double average=0;
for(int i=1;i<=n;i++){
sum+=a[i].t*(n-i);
}
average=sum/n;
for(int i=1;i<=n;i++){
printf("%d ",a[i].m);
}
cout<<endl;
printf("%.2lf\n",average);
return 0;
}
第二个代码抄别人的,AC了。。。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct AC{//(本人爱好QAQ)
int a;
int b;
};
AC f[1005];
bool cmp(const AC&i,const AC&j){//重要cmp(其实本题挺好写)
if(i.b<j.b)return 1;
else return 0;
}
int main(){//主程序开始
int n;
cin>>n;//读入
for(int i=1;i<=n;i++){
cin>>f[i].b;//读入
f[i].a=i;//存入序号
}
sort(f+1,f+1+n,cmp);//直接快排
for(int i=1;i<=n;i++){
printf("%d ",f[i].a);//输出序号
}
printf("\n");//换行
double ans;
for(int i=1;i<=n;i++){
ans+=f[i].b*(n-i);//计算总值,套用多次实践所得的公式QAQ
}
printf("%.2f\n",ans/n);//直接输出平均值
return 0;
}