1412:校庆歌手
描述
为了庆祝校庆,嘉庚学院请了a名歌手来演出,并计划开b场演唱会,每场演唱会只用一名歌手。每名歌手都有各自不同的出场费,从第1名到第a名歌手的出场费分别是c1、c2、…、ca。第1场演唱会由第1名歌手负责,第2场演唱会由第2名歌手负责,…,第a场演唱会由第a名歌手负责,第a+1场演唱会又由第1名歌手负责,…,以此类推。当一名歌手不止负责一场演唱会时,每次演唱会都会得到一笔出场费。当b小于a时,会出现有的歌手没有上场的情况,那么将不会给这些歌手发出场费,而是给从没有上场的歌手每人发一笔候场费d。
学院想要计算总共要花多少费用。
输入
多组案例。一个正整数n,表示案例的数量。(n<=20)
每组案例中,先是两个正整数a和b(a<=2000000, b<=2000000),表示歌手数量和演唱会数量;
然后是a个正整数c1、c2、…、ca,表示每名歌手的出场费(均不大于1000);
最后是一个正整数d,表示给每名未上场歌手发放的候场费(d<=1000)。
输出
针对每组案例,输出一个正整数,表示学院花费的总费用。每组案例输出完都要换行。
样例输入
2
2 5
10 16
1
2 1
10 16
1
样例输出
62
11
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin >> n;
while (n--)
{
int a, b, c, d, sum = 0;
int t, f;
//t为第一名歌手的出场次数
//f为后f为歌手出场次数是t-1
cin >> a >> b;
t = int(ceil(1.0 * b / a));
f = t * a - b;
for (int i = 0; i < a - f; i++)
{
cin >> c;
sum = sum + c * t;
}
for (int i = 0; i < f; i++)
{
cin >> c;
sum = sum + c * (t - 1);
}
cin >> d;
if (t == 1)
{
sum = sum + d * f;
}
cout << sum << endl;
}
return 0;
}