问题标题: 布丁疯了

0
0
已解决
王煜辰
王煜辰
初级光能
初级光能

竟然直接给代码,不怕被举报吗。

王煜辰在2023-09-08 21:32:29追加了内容

什么东东,还发代码


0
0
0
0
王旭邈
王旭邈
资深光能
资深光能

我们举报布丁那个****也不会给它惩罚的

0
0
0
0
0
0
林炜曦
林炜曦
中级守护
中级守护

你的代码大致分析了每个人的等待时间,并进行了一定的优化。然而,你处在一个误区中,即认为优先满足时间较短的人的请求可以减少总等待时间。但这在有些情况下并不能得到最优解。你需要重新设计一个新的策略,让总的等待时间最短。你必须注意的是,每个人购票需要的时间都是不同的,而且一旦排在那个位置就不能改变。

这个问题实际上可以抽象为一个经典的排序问题,每个人都有一个值(购票需要的时间),我们可以基于这个值来为他们排序。然后将所有人的值相加得到总的等待时间。

让我**你的代码:

#include<iostream>
#include<cstdio>
#include<utility> // 用来实现pair数据结构
#include<algorithm> // 用来实现排序函数
using namespace std;
typedef pair<int,int>tp; // 定义了一个新类型pair,有两个整数型成员
tp a[1005]; // 定义了一个pair类型的数组,大小为1005
bool cmp(tp a,tp b){return a.first<b.first;} // 定义了一个比较函数,按照first从小到大排序
long long sum,cnt;
int main(){
    long long n;
    cin>>n;
    for (int i=1;i<=n;i++){
        scanf("%d",&a[i].first); //输入购票时间
        a[i].second=i;           //记录每个人的编号
    }
    sort(a+1,a+n+1,cmp);  //根据购票时间排序, 这里错误,不应该按照first从小到大排序, 因为这样会导致时间久的在前面,总时间就会很大
    for(int i=1;i<=n;i++){
        sum+=a[i].first*(n-(i-1));
    }
    for (int i=1;i<=n;i++){
        cout<<a[i].second<<" ";
    }
    printf("\n%.2lf",sum*1.0/n); // 计算并输出平均等待时间
    return 0;
}

根据你的问题描述,我建议你进行如下修改:

  1. 需要正好相反,将花费时间多的人放到前面,这样平均等待时间就会最小。
  2. 尝试改变cmp函数,实现按照a.first从大到小排序的效果。

试着修改并运行你的代码,看看结果是否符合预期。如有问题,欢迎再次提问。

 

 

 

他脑有毛病

0
0
0
0
我要回答