题目描述
LZY经过大学三年的刻苦学习,在大三毕业前夕,终于入职外卖行业巨头——饱了吗?作为饱了吗的新晋JAVA工程师,项目经理分配了一个艰巨的任务给他,希望他完成一个餐厅过滤器.现在给LZY一个餐馆信息列表,每个餐馆的信息包括id,rating,veganFriendly,price,distance,分别代表餐馆id,餐馆评分,餐馆是否对素食者友好,平均价格以及距离。
过滤规则如下:
其中素食者友好过滤器 veganFriendly 的值可以为 true 或者 false,如果为 true 就意味着你应该只留下包括 veganFriendly 为 true 的餐馆,为 false 则意味着可以包括任何餐馆。此外,我们还有最大价格 maxPrice 和最大距离 maxDistance 两个过滤器,它们分别考虑餐厅的价格因素和距离因素的最大值。
过滤后输出符合要求的餐馆信息,按照 rating 从高到低排序。如果 rating 相同,那么按 id 从高到低排序。简单起见, veganFriendly 为 true 时取值为 1,为 false 时,取值为 0 。
输入
测试数据由多组测试样例组成。
每组测试数据第一行输入4个整数,餐馆的数量 n ( 1 <= n <= 10000 ), 素食友好标记 a ( a == 0 or a == 1 ),最大价格 b ( 0 <= b <= 10000 ), 最远距离c ( 0 <= c <= 10000 )
接下来n行分别输入5个整数 餐馆id q( 1 <= q <= 10000 ),餐馆评分 w ( 1 <= w <= 10000 ) ,餐馆是否对素食者友好 ( e == 0 or e == 1 ),餐馆平均价格 r ( 1 <= r <= 10000 )以及餐馆距离(1 <= g <= 10000 )
输出
输出经过筛选后的餐馆清单,每行输出一条餐馆信息。
样例输入
5 0 50 10
1 4 1 40 10
2 8 0 50 5
3 8 1 30 4
4 10 0 10 3
5 1 1 15 1
样例输出
4 10 0 10 3
3 8 1 30 4
2 8 0 50 5
1 4 1 40 10
5 1 1 15 1
思路
原本想每种过滤器都分别写一个cmp来排序
写到最后自己都不知道在写什么了
后来想了一下,只写一个排序,按要求评分和id排序
输出的时候再判断
#include<bits/stdc++.h>
using namespace std;
int a,b,c,n;
int sum=0;
struct canguan{
int q;
int w;
int e;
int r;
int g;
}f[10005];
bool cmp(canguan a,canguan b){
if(a.w!=b.w){
return a.w>b.w;
}
return a.q>b.q;
}
int main()
{
while(scanf("%d %d %d %d",&n,&a,&b,&c)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d %d %d %d %d",&f[i].q,&f[i].w,&f[i].e,&f[i].r,&f[i].g);
if(f[i].e==1){
sum++;
}
}
sort(f,f+n,cmp);
for(int i=0;i<n;i++)
{
if(a==0){
if(f[i].r<=b&&f[i].g<=c){
printf("%d %d %d %d %d\n",f[i].q,f[i].w,f[i].e,f[i].r,f[i].g);
}
}
else if(a==1){
if(f[i].e==1&&f[i].r<=b&&f[i].g<=c){
printf("%d %d %d %d %d\n",f[i].q,f[i].w,f[i].e,f[i].r,f[i].g);
}
}
}
}
return 0;
}