饱了吗(结构体快排)

题目描述
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 )

输出
输出经过筛选后的餐馆清单,每行输出一条餐馆信息。
样例输入 Copy
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
样例输出 Copy
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

解题思路:
典型的结构题快排,要注意素食友好标记为1时,将所有的距离小于等于最大距离的店铺且价格小于等于最大价格的店铺加入结构体,素食友好标记为0时,将所有的对素食者友好的且距离小于等于最大距离的店铺且价格小于等于最大价格的店铺加入结构体。

#include<bits/stdc++.h>
using namespace std;
struct Node{
    int a,b,c,d,e;
}node[10005];
bool cmp(Node o,Node p){
    if(o.b!=p.b) return o.b>p.b;
    return o.a>p.a;
}
int main(){
    int n,m,k,l,i,x,y,z,t,r,f;
    while(~scanf("%d%d%d%d",&n,&m,&k,&l)){
        f=0;
        for(i=0;i<n;i++){
            scanf("%d%d%d%d%d",&x,&y,&z,&t,&r);
            if(m==0 && t<=k && r<=l){
                node[f].a=x;
                node[f].b=y;
                node[f].c=z;
                node[f].d=t;
                node[f].e=r;
                f++;
            }
            else if(m==1){
                if(z==1 && t<=k && r<=l){
                    node[f].a=x;
                    node[f].b=y;
                    node[f].c=z;
                    node[f].d=t;
                    node[f].e=r;
                    f++;
                }
            }
        }
        sort(node,node+f,cmp);
        for(i=0;i<f;i++){
            printf("%d %d %d %d %d\n",node[i].a,node[i].b,node[i].c,node[i].d,node[i].e);
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章