ELI x NOZOMI
题目描述:
在她们共同的家中,NOZOMI正在给ELI占卜。
NOZOMI用塔罗牌占卜的姿势水平非常高,比如她预测2017年NBA总决赛骑士4-0横扫勇士,2018年世界杯卡西领衔的西班牙队夺冠,以及这场比赛王浩骥dalao肯定AK,而这些在未来也都得到了证实。但是这是在给ELI占卜,所以NOZOMI难免有些紧张,占卜的准确率也就随之下降了。
NOZOMI一共给ELI占卜了n次,其中每次占卜都需要用到m张塔罗牌,每张塔罗牌上有一个数字代表这次占卜的准确率。比较某两次占卜准确率大小的方法是:从第一张开始,数字大的准确率高,若相同则比较第二张的大小,以此类推。
现在NOZOMI想知道每次占卜的准确率,所以她找到了你,请你来帮她按准确率从大到小输出占卜的编号,若准确率相同则编号靠前的先输出。
输入格式:
第一行两个正整数n,m。
接下来n行,每行m个正整数,第i行的m个数表示第i-1次占卜中每张塔罗牌上的数字。
输出格式:
一行n个数,第i个数表示准确率第i大的数。
样例输入:
3 2 8 9 8 10 7 13
样例输出:
2 1 3
提示:
对于20%的数据,m=1;
对于60%的数据,m<=2;
对于100%的数据,n<=50000; m<=10;
时间限制: 1000ms
空间限制: 256MB
#include<bits/stdc++.h>
using namespace std;
struct data{
int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10;
int id;
};
data list1[50005];
bool cmp(data x,data y){
if(x.x1 == y.x1){
if(x.x2 == y.x2){
if(x.x3 == y.x3){
if(x.x4 == y.x4){
if(x.x5 == y.x5){
if(x.x6 == y.x6){
if(x.x7 == y.x7){
if(x.x8 == y.x8){
if(x.x9 == y.x9)
return x.x10 > y.x10;
else
return x.x9 > y.x9;
}else
return x.x8 > y.x8;
}else
return x.x7 > y.x7;
}else
return x.x6 > y.x6;
}else
return x.x5 > y.x5;
}else
return x.x4 > y.x4;
}else
return x.x3 > y.x3;
}else
return x.x2 > y.x2;
}else
return x.x1 > y.x1;
}
int main() {
int n,m;
cin >> n >> m;
for(int i=0; i<n; i++){
if(m > 0)
cin >> list1[i].x1;
if(m > 1)
cin >> list1[i].x2;
if(m > 2)
cin >> list1[i].x3;
if(m > 3)
cin >> list1[i].x4;
if(m > 4)
cin >> list1[i].x5;
if(m > 5)
cin >> list1[i].x6;
if(m > 6)
cin >> list1[i].x7;
if(m > 7)
cin >> list1[i].x8;
if(m > 8)
cin >> list1[i].x9;
if(m > 9)
cin >> list1[i].x10;
list1[i].id = i;
}
sort(list1,list1+n,cmp);
for(int i=0; i<n; i++)
cout << list1[i].id + 1 << " ";
return 0;
}
AC代码