还能生小孩


私信TA

用户名:3192052051516

访问量:348

签 名:

等  级
排  名 17127
经  验 783
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 桂林理工大学
专  业

  自我简介:

TA的其他文章

解题思路:

  易知最后的M个人的打水时间是无人等待的,即无需参与运算,只需计算N-M个人的等待时间。从等待时间较大的开始算起,将N个人分为M组,每组有M/N个人,余出人数按从小到大逐个放入这M组中,并设一个数k表示该数需参与k次相加。如题中第一个水龙头有3个人,则1,4,7中1后面有两个人在等待,故要参与2次相加。同理,4只需参与一次。
参考代码:

#include

#include

using namespace std;

int main()

{

int T[1000];

int i,j;

int N,M;

int time=0;

cin>>N>>M;

for(i=0;i<N;i++)

cin>>T[i];

sort(T,T+N);

for(i=0;i<M;i++)//有M组,进行M次循环相加运算

{

int k=1;//用于标记某个人的等待时间需要进行k次相加

for(j=N-M-1-i;j>=0;j-=M)//由于数组下标的特殊性j需-1

{

time+=T[j]*k;

k++;

}

}

cout<<time;

    return 0;

}

 

0.0分

2 人评分

  评论区

  • «
  • »