为什么4、10两个测试点就是不对
  • 板块P1223 排队接水
  • 楼主Qian_Me
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/18 22:41
  • 上次更新2024/12/19 18:19:27
查看原帖
为什么4、10两个测试点就是不对
1542712
Qian_Me楼主2024/12/18 22:41

为什么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;
}
2024/12/18 22:41
加载中...