为什么4、10两个测试点就是不对,其他都对 哪位大佬可以帮我看看,求了
#include <iostream>
#include <algorithm>
using namespace std;
// 存放人的数据
struct ddd{
int num; // 序号
int time; // 接水时间
};
// sort 比较函数 --> 按 接水时间 升序排序 --> 接水时间短的在前
bool cmp( ddd a, ddd b ){
return a.time < b.time;
}
int main( void ){
int n; // n 人数
int sum = 0; // 总时间
cin >> n;
ddd data[ 1005 ]; // data 存放没个人的接水时间
for ( int i = 0; i < n; i ++ ){
cin >> data[ i ].time; // 输入 每个人的 接水时间
data[ i ].num = i + 1; // 序号
}
// 排序 --> 按 接水时间 升序排序 --> 接水时间短的在前
sort( data, data + n, cmp );
for ( int i = 0; i < n - 1; i ++ ){// 注意这里的 i < n - 1 --> 因为最后一个人不用算,因为他后边没有人了
int j = n - (i + 1); // 表示 排在后边的人数(j是个计数器)
sum += data[ i ].time *j; // 表示的是
// j 表示的是这个人后面等待他接水的人数,那么这个人让后面这些人等待的总时间就是他自己的接水时间 a[i].b 乘以等待他的人数 j。
// 例如,如果一个人接水时间是 3 分钟,后面有 4 个人在等他,那他造成的总的等待时间就是 3×4 = 12 分钟。
// 其实也就是,排在这个人后边的那些人,每个人都要等待这个人接水的时间,若这个人接水 2min,则排在后边的每个人都要 等待 2min
}
for ( int i = 0; i < n; i ++ ){
printf( "%d ", data[ i ].num );
}
cout << endl;
printf( "%.2lf", (double)sum / (double)n );
return 0;
}