小白在线求解答
Description最近acm队决定对近期举行的n场比赛做一总结,以研究哪几场比赛题目难度分配正常,但苦于任务艰巨没人想做,所以就找上你啦~~~
Input
第一行为一个正整数n(0<n<100),接下来有n行。对于每一行有9个整数,第一个整数为比赛序号,接下来八个代表第1~8题的成功解题人数。
Output
输出难度分配最简单的比赛的序号。若题号越小的题目解出的人数越多,则该比赛越简单。(当然和现实的acm赛有区别)
Samples
input
5
1 200 300 400 500 600 700 800 900
2 900 900 800 700 600 400 200 100
3 900 800 700 600 500 400 300 200
4 800 800 800 800 800 800 800 800
5 1 2 3 4 5 6 7 8
output
2
Hint
1. 以样例为例
先看第一题,做出来最多的是2、3号比赛
继续看第二题,2号做出来的比3号多
所以答案是2号
2. 序号不一定是连续的,可以是任何int类型的整数
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
struct{
int a;
int b[8];
}m[n*2+1];
for(int i=0;i<n;i++){
scanf("%d %d %d %d %d %d %d %d %d",&m[i].a,&m[i].b[0],&m[i].b[1],&m[i].b[2],&m[i].b[3],&m[i].b[4],&m[i].b[5],&m[i].b[6],&m[i].b[7]);
}
int x=0;
int z=0;
for(int k=0;k<8;k++){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(m[j].b[z]<m[j+1].b[z]){
m[2*n]=m[j+1];
m[j+1]=m[j];
m[j]=m[2*n];
}
}
}//第z题的人数降序排列
if(m[0].b[z]>m[1].b[z]){
printf("%d\n",m[0].a);
break;
}//如果只有一个最大 输出
else {
for(int h=0;h<n;h++){
if(m[h].b[z]!=m[z].b[z]) {
m[h].b[z+1]=-1;
}
}
z++;
}//让z题不是最大的结构的z+1题人数变为-1
}
return 0;
}