using System;
public class Program {
public static void Main() {
string line;
while ((line = Console.ReadLine()) != null) {
//录入第一行
string[] strings = line.Split(' ');
int[] nra = new int[strings.Length];
for (int i = 0; i < nra.Length; i++) {
nra[i] = int.Parse(strings[i]) ;
}
int[] grade = new int [nra[0]];
int[] time = new int [nra[0]];
int maxgrade = nra[1];
int targetavg = nra[2];
long usetime = 0;
//录入分数和复习用时
for (int i = 0; i < nra[0]; i++) {
line = Console.ReadLine();
strings = line.Split(' ');
grade[i] = int.Parse(strings[0]);
time[i] = int.Parse(strings[1]);
}
float avg = 0;
float sum = 0;
foreach(int i in grade){
sum += i;
}
avg = sum / nra[0];
//贪心算时间
while((int)avg < targetavg){
int mintime = -1;
int index = 0;
for(int i = 0; i < nra[0]; i++){
if(grade[i] == maxgrade) continue;
if(mintime == -1 || time[i] < mintime){
index = i;
mintime = time[i];
}
}
grade[index]++;
sum++;
avg = sum / nra[0];
usetime += mintime;
}
Console.WriteLine(usetime);
}
}
}
思路:每次从分数未满的课中选择需要最少复习时间的课进行复习,复习之后总分++,用时+=复习用时,课程分数++
这里有个坑,用时需要用long型,否则有个案例不通过

京公网安备 11010502036488号