2 solutions
-
1
luogu-P1223题解
主要题意
有 个人接水,安排他们的排队方式使每人平均等待时间最少。
解题思路
因为前面的人接水时间越少,后面的人等待时间也就越少。因此从小到大排序。
为了同时保存每个人原来的输入下标,使用结构体保存输入数据。
因此,平均时间就是对于每个人来说他前面的总时间求和再除以 。
注意输出两位小数。
上代码!
#include<bits/stdc++.h> using namespace std; struct node { int k,l; }a[1010]; bool cmp(node x,node y) { return x.k<y.k; } double cnt=0; int n; int main(void) { cin>>n; for(int i=1;i<=n;i++) cin>>a[i].k,a[i].l=i; sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) cout<<a[i].l<<" "; puts(""); for(int i=1;i<=n;i++) for(int j=1;j<i;j++) cnt+=a[j].k; printf("%.2lf",cnt/n); } -
0
#include<bits/stdc++.h> using namespace std; int main(){ int n,a[1005],b[1005]; double s=0; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; b[i]=i+1; } for(int i=0;i<n;i++){ for(int j=n-1;j>0;j--){ if(a[j]<a[j-1]){ swap(a[j],a[j-1]); swap(b[j],b[j-1]); } } } for(int i=0;i<n;i++){ cout<<b[i]<<' '; } for(int i=0;i<n;i++){ a[i]*=(n-i-1); s+=a[i]; } cout<<endl; printf("%.2f",s/n); return 0; }
- 1
Information
- ID
- 5281
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 3
- Tags
- # Submissions
- 90
- Accepted
- 49
- Uploaded By