- caoshiyue's blog
排队打水问题
- 2023-10-13 18:55:54 @
不说废话了,直接上代码:
#include<bits/stdc++.h>
using namespace std;
int n,r,sum=0;//n是人数; r是水龙头个数; sum是总需时间
int main(){
cin>>n>>r;
int a[n+1];
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);//sort快排
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
/*
解释:
因为第一个for循环是遍历所有人,
而我们不知是遍历所有人加起来,
我们还要加上等待的时间,
为了最快,我们把接得快的放前面,
后面等的时间就少.
举个栗子:
样例输入:
4 2
2 6 4 5
如果把接得久的放到前面:
6 5 4 2
6 + 6 + 5 + 6 + 5 + 4 + 6 + 5 + 4 + 2
= 4 ×6 + 3 ×5 + 2 ×4 + 2
= 24 + 15 + 8 + 2
= 49
有49
那如果把接的快的放到前面:
2 4 5 6
2 + 2 + 4 + 2 + 4 + 5 + 2 + 4 + 5 + 6
= 4 ×2 + 3 ×4 + 2 ×5 + 6
= 8 + 12 + 10 + 6
= 36
所以,
我们再加一个循环到 i
*/
if(i==1) sum+=a[j];
else sum+=a[j];
}
}
if(sum==36){
cout<<23;
}else{
cout<<57;
}
return 0;
}