1012 The Best Rank

#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int N, M;
vector<int>c, m, e, a, cc, mm, ee, aa, bh;//排序时acme
int sear(int cj, vector<int> f) {
    int left, right, mid;
    left = 0;
    right = f.size() - 1;
    while (left <= right) {
        mid = left + (right - left) / 2;
        if (f[mid] == cj) {
            while (mid>=0&&mid<=f.size()-1) {
                if (f[mid] == cj)
                    mid++;
                else 
                    break;
            }
            return f.size() - mid+1;
        }
        else if (f[mid] < cj)
            left = mid + 1;
        else if (f[mid] > cj)
            right = mid - 1;
    }
    return -1;
}
void print(int x) {
    int i, n;
    bool cheak = false;
    for(i=0;i<N;i++)
        if (bh[i] == x) {
            n = i;
            cheak = true;
            break;
        }
    if (!cheak)
        printf("N/A");
    else {
        int min=99999;
        char str;
        if (min > sear(a[n],aa)) {
            min = sear(a[n],aa);
            str = 'A';
        }
        if (min > sear(c[n],cc)) {
            min = sear(c[n],cc);
            str = 'C';
        }
        if (min > sear(m[n],mm)) {
            min = sear(m[n],mm);
            str = 'M';
        }
        if (min > sear(e[n],ee)) {
            min = sear(e[n],ee);
            str = 'E';
        }
        printf("%d %c", min, str);
    }
    return;
}

int main() {
    int i,x, y, u, v;
    vector<int>s;
    scanf("%d %d", &N, &M);
    for (i = 1; i <= N; i++) {
        scanf("%d %d %d %d", &x, &y, &u, &v);
        bh.push_back(x);
        c.push_back(y);
        m.push_back(u);
        e.push_back(v);
        a.push_back(y + u + v);
    }
    for (i = 1; i <= M; i++) {
        scanf("%d", &x); 
        s.push_back(x);
    }
    cc = c;
    mm = m;
    ee = e;
    aa = a;
    sort(cc.begin(), cc.end());
    sort(mm.begin(), mm.end());
    sort(ee.begin(), ee.end());
    sort(aa.begin(), aa.end());
    for (i = 0; i < M; i++) {
        print(s[i]);
        if (i != M - 1)
            printf("\n");
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值