首先是题目~~
题目来自洛谷emm,然后贴我写的代码,用了sort快排和结构体,目的是把号码和数据绑定在一起emm
#include <bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
}a[1005];
bool cmp(node a1,node a2){
return a1.x<a2.x;
}
int main()
{
int n;
double sum=0;
cin>>n;
for(int i=0;i<n;i++)
{cin>>a[i].x;
a[i].y=i+1;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
sum+=a[i].x*(n-1-i);
}
for(int i=0;i<n;i++){
cout<<a[i].y<<' ';
}
cout<<'\n';
printf("%.2lf",sum/n);
return 0;
}
我在想能不能不用结构体,然后就看到了大佬的代码,知乎内行,同九年,惟汝秀!!
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
double sum;
long int n;
long long int t[1001];
double ans;
int main(int argc, const char * argv[])
{
cin>>n;
int x;
for(int i=1;i<=n;i++)
{
cin>>x;
t[i]=x*1001+i;
}
sort(t+1,t+1+n);
for(int j=1;j<=n;j++)
{
cout<<t[j]%1001<<" ";
sum+=t[j]/1001*(n-j);
}
cout<<endl;
ans=sum/n;
printf("%0.2lf",ans);
return 0;
}
然后我试着自己写了一遍
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long int a[10005];
double sum=0;
int n,x;
cin>>n;
for(int i=1;i<=n;i++)
{cin>>x;
a[i]=x*1001+i;
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
cout<<a[i]%1001<<' ';
sum+=a[i]/1001*(n-i);
}
cout<<'\n';
printf("%.2lf",sum/n);
return 0;
}
然后超时了,%%%%%%%%呜呜呜
本来开的数组a[100],结果发现TLE了,后来问了一下,再看一遍题,发现数据1-1000所以果断开了1005(只要不小于1001就行了),因为我从1开始录入数据的,这个故事告诉我们,粗心不仅过不了题,还会在群里丢脸,无情呀