题目链接:https://www.luogu.com.cn/problem/P6363
题目描述
某大学的《软件工程》必修课分为理论和实践部分。理论部分由该校教授完成授课;而实践部分是由第三方的公司主导,需要同学们在五周时间内自学 HTML、css、JavaScript、vue、Python、django 等技术,并组队完成一个真实的互联网商业应用。
参与这个课程的有n(0≤n≤1000)n(0\le n \le 1000)n(0≤n≤1000)个学生,分成了不超过262626个队伍,每个队伍用A到Z来表示。每个队伍都会完成一个项目,并以队伍为单位,给所有队伍(包括自己队伍)打分,范围是000到100100100的整数。
为了平息学生对这门课产生的出多问题的不满(比如工作量太大、时间过于紧张、考核方式不公平等),老师决定使用一种“看起来”很公平的方式来决定每组队伍的项目得分:
对于某个队伍,首先计算所有队伍(包括自己)给这个队伍评分的平均值,然后剔除掉和这个平均值差别超过151515分的评分(保证不会出现所有的评分全部被剔除的情况),最后再对剩余的评分求平均值,四舍五入取整后作为这个队伍的项目得分。
对于每一个同学,我们已经得知他们的队伍代号和理论成绩(也是000到100100100分的整数)。这位同学的最后得分就是60%60\%60%的理论成绩加上40%40\%40%的所在队伍的项目得分,然后四舍五入取整。
现在老师想知道所有同学的分数排行。请按最后得分从高到低的顺序,输出每位同学的得分和他所在的队伍。
输入格式
第一行两个整数nnn和kkk,分别表示学生数和队伍数。
接下来nnn行,每行一个整数sis_isi和一个大写字母cic_ici,表示第iii个选手的理论分数和队伍编号。保证队伍编号范围是从A开始后连续kkk个字母中的一个。
接下来kkk行,每行kkk个整数。其中第iii行第jjj列的整数ai,ja_{i,j}ai,j表示第iii个队伍给第jjj个队伍的评分,当i=ji=ji=j时,就是自评。
输出格式
输出nnn行表示答案,得分高的同学优先输出,得分相同时队伍编号较小的同学优先输出。对于每一行,先输出这位同学成绩,然后输出代表他的队伍编号的大写英文字母。
输入输出样例
输入 #1
6 3
70 A
80 A
65 B
95 B
85 C
90 C
70 90 100
95 88 85
30 47 100
输出 #1
93 B
92 C
89 C
76 A
75 B
70 A
说明/提示
A 组收到的分数分别是70,95,3070,95,3070,95,30,其平均分为656565,则95,3095,3095,30被作为无效成绩剔除,因此 A 组的项目得分是707070分。
B 组收到的分数分别是90,88,4790,88,4790,88,47,其平均分为757575,则474747被作为无效成绩剔除,因此 B 组的项目得分是898989分。
C 组收到的分数分别是100,85,100100,85,100100,85,100,其平均分为959595,没有打分被剔除,因此 C 组的项目得分是959595分。
-----------------------------------------------------------------求助--------------------------------------------------------
有没有大佬能帮忙分析下哪里出了问题呀!!!!
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();
int k=sc.nextInt();
long [][]lilun=new long[n][2];
int shijian[][]=new int[k][k];
long score[]=new long['Z'+1];//有效成绩
double avg;//每一组的平均分
double sum=0;
for(int i=0;i<n;i++) {
lilun[i][0]=sc.nextInt();
String X=sc.next();
char []zm=X.toCharArray();
lilun[i][1]=zm[0];
}
for(int i=0;i<k;i++) {
for(int j=0;j<k;j++) {
shijian[i][j]=sc.nextInt();
}
}
for(int i=0;i<k;i++) {
for(int j=0;j<k;j++) {
sum+=shijian[j][i];
}
avg=sum/k;
int o=k;
for(int l=0;l<k;l++) {
if(Math.abs(shijian[l][i]-avg)>15) {
sum-=shijian[l][i];
o--;
}
}
score[i+'A']=(int)Math.round(sum/o);
sum=0;
}
for(int i=0;i<n;i++) {
int x= (int) Math.round((lilun[i][0]*0.6+score[(int)(lilun[i][1])]*0.4));
lilun[i][0]= x;
}
for(int i=0;i<n;i++) {
for(int j=i;j<n;j++) {
if(lilun[j][0]>lilun[i][0]) {
long temp=lilun[i][0];
lilun[i][0]=lilun[j][0];
lilun[j][0]=temp;
long temp1=lilun[i][1];
lilun[i][1]=lilun[j][1];
lilun[j][1]=temp1;
}
}
}
for(int i=0;i<n;i++) {
System.out.print(lilun[i][0]+" "+(char)lilun[i][1]);
System.out.println();
}
}
}
}
--------始终就是AC不了:(