P1223 排队接水
题目链接 https://www.luogu.com.cn/problem/P1223
呃。。。。。。是一道很水的题。。。。
不过好像是第一次用双关键字排序(?)
关于为什么是将所用时间从小到大排序,初中学不等式应该证明过→https://www.luogu.com.cn/blog/user26231/solution-p1223
放AC代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct a 4 { 5 int t; 6 int num; 7 }; 8 bool cmp(a x,a y)//双关键字排序 9 { 10 if(x.t!=y.t) return x.t<y.t; 11 return x.num<y.num; 12 } 13 int main() 14 { 15 struct a a[1010]; 16 int n; 17 double time=0; 18 cin>>n; 19 for(int i=1;i<=n;i++) 20 { 21 cin>>a[i].t; 22 a[i].num=i; 23 } 24 sort(a+1,a+n+1,cmp); 25 for(int i=1;i<=n;i++)//输出时间从小到大所对应的人的编号 26 cout<<a[i].num<<" "; 27 cout<<endl; 28 for(int j=n-1;j>=1;j--) 29 { 30 int i=n-j; 31 time+=a[i].t*j; 32 } 33 printf("%0.2lf",time/n); 34 return 0; 35 }