涉及算法:贪心,排序
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
const int M=3e5+10,N=1e3+10;
using namespace std;
int n;
//定义结构体变量,存储每个人打水花费时间以及他们的编号
//方便一会输出按时间从小到大排序后 各个时间所对应的编号
struct people
{
int time;
int num;
};
people p[N];
//对时间大小进行排序,需要自定义排序
bool cmp(people p1,people p2)
{
return p1.time<p2.time;
}
//打水时间越少的放在前面,每个人的等待时间最短,总等待时间最短,平均等待时间最短
signed main()
{
cin>>n;
//输入每个人打水所需时间
for(int i=1;i<=n;i++)
{
cin>>p[i].time;
p[i].num=i;
}
//按时间排序
sort(p+1,p+n+1,cmp);
//输出排序后顺序
for(int i=1;i<=n;i++)
{
cout<<p[i].num<<' ';
}
double sum=0.0;
//总的等待时间
for(int i=1;i<n;i++)
{
sum+=p[i].time*(n-i);//关键公式
}
printf("\n%.2f",sum/n);
return 0;
}
涉及算法:字符串拼接、字符串排序
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
const int M=3e5+10,N=1e3+10;
using namespace std;
int n;
string p[M];
//要保证排出的二进制序列最小
//例如:p1=10 p2=100
//p1+p2=10100 p2+p1=10010
//应返回p2+p1
bool cmp(string p1,string p2)
{
return p1+p2<p2+p1;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>p[i];
}
//自定义排序,保证排序结果为最小
sort(p+1,p+n+1,cmp);
for(int i=1;i<=n;i++)
{
cout<<p[i];
}
return 0;
}