hdu-2078-复习时间(数学)
Problem Description
为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑。xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的平方,而复习第一门课的效率为100和这门课的难度差的平方。xhd这学期选了n门课,但是一晚上他最多只能复习m门课,请问他一晚上复习的最高效率值是多少?
Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据的第一行是两个整数n(1 <= n <= 40),m(1 <= m <= n)。
接着有n行,每行有一个正整数a(1 <= a <= 100),表示这门课的难度值。
Output
对于每组输入数据,输出一个整数,表示最高效率值。
Sample Input
2
2 2
52
25
12 5
89
64
6
43
56
72
92
23
20
22
37
31
Sample Output
5625
8836
简单的数学,题目的代码很简单
例如:我们拿两个数和三个数做下比较
100 x
(100-x)^2=10000-200x+x^2 (1)
100 y x
(100-y)^2+(y-x)^2=(10000-200y+y^2)-(y^2-2xy+x^2) (2)
两式相减
(10000-200x+x^2)-((10000-200y+y^2)-(y^2-2xy+x^2))
=-200x+200y-2y^2+2xy
=200(y-x)+2y(x-y)
=(200-2y)*(y-x)
因为1 < y <= 100,所以结果大于等于0
显然只要y不是100,实际y应该是个1~100的数,那么多一个数反而会使结果变小
而题目要求最大效率,那我们只要拿最小的一个数就行了
所以代码很简单,即(100-min)^2就是结果了
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace HDU2078 { class Program { static void Main(string[] args) { int t = int.Parse(Console.ReadLine()); while (t-- > 0) { string[] s = Console.ReadLine().Split(); int n = int.Parse(s[0]),a=int.Parse(Console.ReadLine()); for (int i = 1; i < n; i++) { int temp =int.Parse(Console.ReadLine()); if (temp < a) a = temp; } Console.WriteLine((100 - a) * (100 - a)); } } } }