Description |
题目描述 |
Bob is a freshman in Marjar University. He is clever and diligent. However, he is not good at math, especially in Mathematical Analysis. After a mid-term exam, Bob was anxious about his grade. He went to the professor asking about the result of the exam. The professor said: "Too bad! You made me so disappointed." "Hummm... I am giving lessons to two classes. If you were in the other class, the average scores of both classes will increase." Now, you are given the scores of all students in the two classes, except for the Bob's. Please calculate the possible range of Bob's score. All scores shall be integers within [0, 100]. |
Bob是Marjar大学的大一新生,他活泼又聪明。可惜是个数学渣,尤其在数学分析上。 半期考后,Bob对成绩十分焦虑,于是就跑去找教授问自己的分数。教授长叹: “渣爆了!你真让我失望。” “恩……我现在教两个班。如果把你放到另一个班,那么两个班各自的平均分都会提高。” 现在,你拿到了除Bob外两个班所以学生的成绩。计算Bob可能获得的分数范围。分数的所有可能性是[0, 100]的整数。 |
Input |
输入 |
There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case: The first line contains two integers N (2 <= N <= 50) and M (1 <= M <= 50) indicating the number of students in Bob's class and the number of students in the other class respectively. The next line contains N - 1 integers A1, A2, .., AN-1 representing the scores of other students in Bob's class. The last line contains M integers B1, B2, .., BM representing the scores of students in the other class. |
多组测试样例。 输入的首行是一个整数T表示测试样例的数量。每个测试样例包含: 第一行有两个整数N (2 <= N <= 50) 和M (1 <= M <= 50) 分别表示Bob所在班级的学生数和另一个班级的学生数。 下一个有N – 1个整数A1, A2, .., AN-1,表示Bob所在班级其他同学的成绩。 最后一行有M个整数B1, B2, .., BM,表示另一个班级同学的成绩。 |
Output |
输出 |
For each test case, output two integers representing the minimal possible score and the maximal possible score of Bob. It is guaranteed that the solution always exists. |
每个测试样例输出两个整数,分别表示Bob可能获得成绩的最小值和最大值。 所有情况都是保证有解的。 |
Sample Input - 输入样例 |
Sample Output - 输出样例 |
2 4 3 5 5 5 4 4 3 6 5 5 5 4 5 3 1 3 2 2 1 |
4 4 2 4 |
【题解】
我们先假设Bob的成绩为x,Bob所在的班级除Bob外成绩的和为Sn,另一个班成绩的和为Sm。
得到2个不等式:
(Sn + x)/n < Sn/(n - 1)
Sm/m < (Sm + x)/(m + 1)
化简得:
Sm/m < x < Sn/(n - 1)
接着需要注意一下进度的问题。
Sm/m无论是否整除,x的最小值总是要比其大1。
但是对于Sn/(n - 1)如果发生整除,只能手动把结果减去1了。
【代码 C++】
#include <cstdio>
int read_g(){
int add = getchar() - '';
int a = getchar();
while (a >= '' && a <= '') add = add * + a - '', a = getchar();
return add;
}
int main(){
int t = read_g(), n, m, i, s;
while (t--){
n = read_g(); m = read_g();
s = ;
for (i = ; i < n; ++i) s += read_g();
if (s % (n - )) n = s / (n - );
else n = s / (n - ) - ;
for (i = s = ; i < m; ++i) s += read_g();
m = s / m + ;
printf("%d %d\n", m, n);
}
}
ZOJ 3819