Bailian4069 买手机【序列处理+排序】
4069:买手机
总时间限制: 1000ms 内存限制: 65536kB
描述
有一天你想去网上买手机。各式各样可供选择的手机太多了,让你不知道该选哪一款,于是你决定看看各个型号的销售情况和其他人对该手机的评价。网站上可以得到手机的价格、销售量、其他用户对该手机的平均打分。在一番浏览之后,你决定在价格能承受的范围内,销售量越大的手机越好;销售量相同时,平均得分越高的手机越好;销售量和平均打分都相同时,价格越低越好。假设现在你有k元钱,给你n个手机的信息,给出你能买得起的所有手机,并按照上述的偏好从好到差排序输出。
一个手机有四个信息,都是非负整数,分别为产品id、价格、销售量、平均得分。四个属性取值都在10000以内。
输入
第一行是一个整数m,表示有m组试样例。
接下来m块,每块第一行是两个整数k和n,表示你有k元钱,有n个手机可购买。n不大于50。
接下来n行,每行是四个整数,用空格隔开,分别是一个手机的产品id、价格、销售量、平均得分。
输入保证没有价格、销售量、平均得分都相同的产品,且至少有一个买得起的产品。
输出
对于每组输入,输出该组你能买得起的所有手机的id,并按照上述的偏好从好到差排序。
样例输入
2
2000 3
1 2000 3278 4
2 1899 5666 5
3 1799 6003 5
1900 3
1 2000 3278 4
2 1899 5666 5
3 1799 5666 5
样例输出
3
2
1
3
2
问题链接:Bailian4069 买手机
问题简述:(略)
问题分析:
序列处理问题,排序后输出结果。
读入数据时,如果可以淘汰不满足条件的数据,则可以极大提高计算效率。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* Bailian4069 买手机 */
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 50;
struct Phone {
int id, price, sale, score;
bool operator < (Phone & p) {
if(sale!=p.sale) return sale > p.sale;
if(score!=p.score) return score > p.score;
return price < p.price;
}
} p[N];
int main()
{
int m, k, n;
cin >> m;
while(m--) {
cin >> k >> n;
int cnt = 0;
for(int i = 0; i < n; i++) {
scanf("%d%d%d%d", &p[cnt].id, &p[cnt].price, &p[cnt].sale, &p[cnt].score);
if(p[cnt].price <= k) cnt++;
}
sort(p, p + cnt);
for(int i = 0; i < cnt; i++)
printf("%d\n", p[i].id);
}
return 0;
}
上一篇: 牛客-小a与“204”(思维)
下一篇: JTAG Boundary Scan