高级天翼
1251 排队买票经验值:1200
题目描述 Description
春节将至,有N个人在一个火车票窗口前排队买票,一个人买完票了则离开,为使他们的等待时间最少,请找出这N个人排队的一种顺序。
输入描述 Input Description
第一行为N,第二行为这N个人的买票等待时间t,每个数之间有一个空格。(1=<N,t<=1000)
输出描述 Output Description
输出两行,第一行为排队的顺序,第二行为这种方案下的平均等待时间(保留两位小数)。如果两人等待时间相同,则按输入顺序排序,输入靠前的则排在前面。
样例输入 Sample Input
10 8 7 9 3 5 2 1 6 4 10
样例输出 Sample Output
7 6 4 9 5 8 2 1 3 10 22.00
数据范围及提示 Data Size & Hint
(当前买票人等待的时间*包括当前买票人在内的剩余人数)的累加和
如样例中第一位买票人等待的时间为1,剩余10人,则时间为1 * 10=10;第二位买票人等待的时间为2,剩余9人,则时间为2 * 9=18;。。。直到第十位买票人等待的时间为10,剩余1人,时间为10 * 1=10;将这些时间加起来再除以人数10为22.00。
张恩泽在2020-08-25 08:31:20追加了内容
0分代码:
//CODE
#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
using namespace std;
struct ss
{
int t,pos;
}a[10000];
bool cmp(ss x,ss y)
{
if(x.t!=y.t)
return x.t<y.t;
return x.pos<y.pos;
}
int main()
{
int n;
double sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].t;
a[i].pos=i;
}
sort(a+1,a+n+1,cmp);
int c=n;
for(int i=1;i<=n;i++)
{
cout<<a[i].pos<<" ";
sum+=i*(c--);
}
cout<<endl;
sum=sum*1.0/n;
printf("%.2f",sum);
return 0;//好习惯!
}
高级光能
你好!
这道题其实不难;
思路:
定义结构体,里面包含时间和编号
cmp函数:若x.时间!=y.时间 return x.时间<y.时间
return x.编号<y.编号
主函数
输入//注意编号需要手动赋值
sort
循环 cout a[i].编号 " ";
sum+=a[i].时间*当前数量(求项数,附图1.1)
保留两位,输出sum即可AC!//别忘了cstdio
————————————————————
//其实你自己应该可以推出来,或者说背出来。。。
望采纳,蟹蟹
高级光能
- struct s{
- int num,cnt;
- }a[1001];
- bool cmp(s a,s b){
- if(a.num!=b.num) return a.num<b.num;
- return a.cnt<b.cnt;
- if(a.num!=b.num) return a.num<b.num;
- }
- _ _ _ _ _
- struct函数排序