问题 J: LZY订单查询

题目描述

LZY由于在“饱了么”工作的不错,由其是上次在大家的帮助下完成了餐厅筛选系统,深得顶头上司WLJ的赏识。WLJ今天交给他一个新的任务,并且许诺LZY完成后给他升职加薪。为了降低LZY的工作量,WLJ只要求他筛选一天之内的订单即可。LZY于是又来求助你们了。WLJ这次给他的任务是,完成一个订单查询系统。一个订单由订单编号、订单名称、订单完成时间、用户满意度组成,LZY的任务是根据不同的筛选条件,筛选出符合要求的订单列表。

输入

测试样例由多组测试数据组成。每组测试数据第一行输入一个正整数 n ( 1 <= n <= 500 ),代表订单总数,接下来n行输入 3个字符串 a ,b ,c ( 1 <= a.length , b.length <= 20) ( c.length == 8 )和一个整数 d ( 0 <= d <= 5 )分别代表订单编号、订单名称、订单完成时间、用户满意度。
其中订单完成时间为固定格式 hh:mm:ss
最后一行输入两个字符串 q, w ,分别代表符合要求的订单的 最晚订单完成时间 以及 最低用户满意度,超出最晚订单完成时间以及低于最低用户满意度的订单不应该被筛选。
如果q和w任意一项为all,代表该项筛选没有限制。如果q和w均为 all,则输出所有订单信息。筛选完成后按照订单时间从小到大排序,如果时间一致,则按用户满意度从大到小排列,如果用户满意度一致,则按照订单编号从小到大排列。

输出

输出符合条件的订单信息,每条信息用换行符分隔。

样例输入

3
tmhymusgykzuynaxht zgdmpzqbuh 10:39:10 5
icfffbfoqekdrfjifx unwzrjcevc 02:15:17 2
ejdjjuooprfazylyrp bviuaftdfp 17:34:56 0
all 0

样例输出

icfffbfoqekdrfjifx unwzrjcevc 02:15:17 2
tmhymusgykzuynaxht zgdmpzqbuh 10:39:10 5
ejdjjuooprfazylyrp bviuaftdfp 17:34:56 0

思路

这题是个结构体快排 用string可以节省很多时间
他的字典序排序可以完美解决时间的和all的问题

代码

#include<bits/stdc++.h>
using namespace std;
struct aa{
	string dd;
	string mc;
	string time;
	string myd;
}a[550];
int cmp(aa a,aa b){
	if(a.time==b.time){
		if(a.myd==b.myd){
			return a.dd<b.dd;
		}
		return a.myd>b.myd;
	}
	return a.time<b.time;
}
int main(){
	int n;
	while(cin>>n){
		for(int i=0;i<n;i++){
			cin>>a[i].dd>>a[i].mc>>a[i].time>>a[i].myd;
		}
		sort(a,a+n,cmp);
		string q,w;
		cin>>q>>w;
		if(q=="all"&&w=="all"){
			for(int i=0;i<n;i++){
				cout<<a[i].dd<<" "<<a[i].mc<<" "<<a[i].time<<" "<<a[i].myd<<endl;
			}
		}else if(q=="all"&&w!="all"){
			for(int i=0;i<n;i++){
				if(a[i].myd>=w){
					cout<<a[i].dd<<" "<<a[i].mc<<" "<<a[i].time<<" "<<a[i].myd<<endl;
				}
			}
		}else if(q!="all"&&w=="all"){
			for(int i=0;i<n;i++){
				if(a[i].time<=q){
					cout<<a[i].dd<<" "<<a[i].mc<<" "<<a[i].time<<" "<<a[i].myd<<endl;
				}
			}
		}else{
			for(int i=0;i<n;i++){
				if(a[i].time<=q&&a[i].myd>=w){
					cout<<a[i].dd<<" "<<a[i].mc<<" "<<a[i].time<<" "<<a[i].myd<<endl;
				}
			}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值