【问题描述】
某公司需要招聘一批员工,该公司有自己独特的评价体系,对应聘者设立了 3 个指标:技能值 Ki、智慧值 Ii 和忠诚度 Ei ,i=1, 2, ...
经过严格的初选和复选以及各项测试以后,有 N 个人进入最后的名单,公司给出了每个人的各项指标值,并规定对于某人 i,如果存在另外人 j,有Ki < Kj 、Ii < Ij 、Ei < Ej ,则 i 将会被淘汰。
请找出总共有多少人会被淘汰。
【输入形式】
第一行包含一个整数 N (1≤ N ≤ 500000),表示最终进入评价名单的人数。第二行包括 N 个整数 Ki,第三行包含 N 个整数 Ii,第四行包含 N 个整数 Ei ,0 ≤ Ki、Ii 、 Ei ≤ 109。
【输出形式】
输出为一行一个整数。
【思路分析】
找到一个淘汰的人就要将他的数据删去,这时把它的数据改成最大它会将其他人淘汰,将它的数据改成最小又会被其他人淘汰,这都会影响最终输出的count值。所以我们将它的三个数据任意两个一个改成1,一个改成99999999这样它就不会淘汰别人也不会被别人淘汰,就不会改变count的值了。
#include<iostream>
using namespace std;
struct value{
long long skill;
long long wise;
long long loyalty;
};
int main(){
int n;
cin>>n;
value p[n];
for(int i=0;i<n;i++){
cin>>p[i].skill;
}
for(int i=0;i<n;i++){
cin>>p[i].wise;
}
for(int i=0;i<n;i++){
cin>>p[i].loyalty;
}
int count=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(p[i].skill>p[j].skill&&p[i].wise>p[j].wise&&p[i].loyalty>p[j].loyalty)
{
count++;
p[j].skill=1,p[j].wise=99999999;
}
}
}
cout<<count;
return 0;
}