题解
首先说明这题用java来做会超时T_T ,今天用java 类数组+Array.sort()敲了一套代码,发现会超时,然后看网上是用ArrayList 容器 我就把 数组改成容器来做 ,发现还是超时,最后用了C++来做,好家伙,C++的测试点4也快超时 怪不得java总是超时。不过我也发现这容器还是比较快一点的。
思路:
1.对人 标记分类 (隐藏的 一级分类)
2.用compare() 多级排序 ,其对象带入sort中。
#include <bits/stdc++.h>
using namespace std;
#define _for(a,b) for(i=a;i<b;i++)
struct student{
int id;
int virtue;
int talent;
int Class;
};
struct student *s;
int L,H;
bool cmp(student a,student b){
if(a.Class!=b.Class)return a.Class<b.Class;
else{
if((a.talent+a.virtue)==(b.talent+b.virtue))
{
if(a.virtue==b.virtue)return a.id<b.id;
return a.virtue>b.virtue;
}
return (a.talent+a.virtue)>(b.talent+b.virtue);
}
}
int main(){
int N,i,ct;
cin>>N>>L>>H;
ct=N;
s=new student[N];
_for(0,N){
cin>>s[i].id>>s[i].virtue>>s[i].talent;
if(s[i].talent<L||s[i].virtue<L){s[i].Class=5;ct--;}