我在编码比赛中遇到了以下问题。我尝试了很多,但是一个私人测试用例总是以错误的答案对我来说失败,我无法弄清楚为什么我的下面的方法会失败。我没有天真的解决方案来生成压力测试用例并进行比较。此外,不会发表社论。因此,如果可能的话,我正在寻找有人指出我的方法中的缺陷。
以下是对该问题的详细描述以及我到目前为止所尝试的内容。
问题:有多个地区,您会根据学生在各自地区的排名为每个地区的学生打分。例如:
Region1:
StudentName, Score
A, 50.0
B, 60.0
C, 40.0
Region2:
StudentName, Score
D, 30.0
E, 10.0
F, 20.0
在上面的数据中,学生 A 在 Region1 中排名 1,B 在 Region1 中排名 2,C 在 Region1 中排名 3。类似地,D 在 Region2 中有 Rank1,E 有 Rank2,F 有 Rank3。
一个学生的分数可能较低,但在同一区域内的排名仍然较高。例如,A 在 Region1 中的排名比 B 好,即我们应该假设每个区域的数据已经按照排名进行了排序。
我们的任务是合并所有区域的数据并创建一个根据分数排名的全局数据。约束条件是,任何在该地区排名较低的学生仍然不能比该地区其他学生的排名高于原始地区数据中的排名。
例如:
Region1:
A, 50.0
B, 60.0
C, 40.0
Region2:
D, 30.0
E, 10.0
F, 20.0
将合并为:
A, 50.0
B, 60.0
C, 40.0
D, 30.0
E, 10.0
F, 20.0
顺序没有根据分数改变,因为 B 将始终低于 A 并且 F 将始终低于 E 根据他们所在地区的限制。
其他测试用例:
Region1:
A, 50.0
B, 60.0
C, 70.0
Region2:
D, 30.0
E, 20.0
F, 10.0
再次导致 A,B,C,D,E,F 的顺序
Region1:
A, 60.0
B, 80.0
C, 100.0
Region2:
D, 70.0
E, 90.0
F, 110.0
将导致:D、E、F、A、B、C
但,
Region1:
A, 11.5
B, 8.5
C, 10.0
Region2:
D, 12.0
E, 9.0
F, 9.5
将导致:
D, 12.0
A, 11.5
E, 9.0
B, 8.5
C, 10.0
F, 9.5
Constraints:
1<=number of regions<=6
score can be upto 7 decimal places
我的方法是将所有输入数据添加到一个列表中并保持稳定的排序,即如果两个学生的区域相同,则比较他们在区域中的排名,否则比较分数。
static class Student implements Comparable<Student>
{
String name;
double score;
int zone;
int rank;
//constructor
public int compareTo(Student o)
{
if(this.zone == o.zone)
{
//lower i.e. better rank
return Integer.compare(this.rank, o.rank);
}
//higher i.e. better score
return Double.compare(o.score, this.score);
}
}
main()
{
//read data from console input into an ArrayList<Student> students
Collections.sort(students);
//print each student from students
}
这个问题没有提到两个学生在不同区域的分数是否相等。在这种情况下,我尝试使用他们各自在区域中的排名来打破平局,但私人测试用例一直失败。我最初认为该问题可能缺少一些信息,但我在竞赛仪表板中看到许多成功提交此问题的信息。这就是我相信我遗漏了一些东西的原因,这个问题并不像我想的那么简单。但是,我无法想出一个测试用例来验证这个假设。
慕尼黑5688855
智慧大石
相关分类