【爱奇艺2018-09-15在线笔试】局长的食物

版权声明:本文为阿木寺的原创文章,未经本人允许不得转载。 https://blog.csdn.net/amusi1994/article/details/82713027

题目描述

局长的食物
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 131072KB;其他语言 655360KB
题目描述:
局长有N种食物,每种食物有Ai份。

每天局长会吃一份食物,或者买一份食物(即每天只能进行吃或买其中的一种动作),这样过了M天

现在局长想知道M天后第p种食物的份数排名(从大到小,相同算并列,例如3 3 2,则排名为1 1 3)

N,M,P<=100,Ai<=1000

输入
第一行N M P

第二行N个数Ai

接下来M行,每行A i或者B i分别表示买一份食物i,吃一份食物i

输出
一个答案

样例输入
3 4 2
5 3 1
B 1
A 2
A 2
A 3
样例输出
1

代码

C++代码1:比较版

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>

using namespace std;

int main()
{
    int food_var[101];
    int food_his[101];  // 食物直方图
    char food_ways[101];
    int food_B[101];

    int n, m, p;        // n表示食物种类  m表示天数  p表示要查询的第p中食物的份数
    cin >> n >> m >> p;

    int temp;
    // 一行输入完全:建立食物直方图
    for (int i = 1; i <= n; ++i){
        cin >> temp;
        food_his[i] = temp;
    }

    // 多行输入
    char c_temp;
    for (int i = 1; i <=m; ++i){
        cin >> c_temp >> temp;
        // A表示买+1,B表示吃-1
        if ('A' == c_temp){
            food_his[temp]++;
        }
        else{
            food_his[temp]--;
        }

    }

    /*for (int i = 1; i <=n; ++i){
        cout << food_his[i] << endl;
    }*/


    // 找到排名

    //cout << food_his[p];  // 输出

    int top = 1;

    int comp_value = food_his[p];

    for (int i = 1; i <= n; ++i){
        if (food_his[i] > comp_value)
            top++;
    }

    cout << top;


    return 0;
}

C++代码2:排序版

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;

int A[100 + 5];

int main()
{
    int N, M, P;     
    scanf("%d%d%d", &N, &M, &P);     
    for (int i = 0; i < N; i++)         
        scanf("%d", &A[i]);

    for (int i = 0; i < M; i++)
    { 
        char c;         
        int t;         
        cin >> c >> t;         
        if (c == 'A')            
            A[t - 1]++;       
        else             
            A[t - 1]--; 
    }     

    vector<pair<int, int>> p(N);     
    for (int i = 0; i < N; i++) 
    { 
        p[i].first = A[i];         
        p[i].second = i; 
    }     

    auto cmp = [](const pair<int, int> &a, const pair<int, int> &b) 
    {         
        return a.first < b.first;     
    };     

    sort(p.begin(), p.end(), cmp);     

    int d = distance(upper_bound(p.begin(), p.end(), pair<int, int>(A[P - 1], 0), cmp), p.end());     

    printf("%d\n", d + 1);     

    return 0;
}

Python版本

if __name__ == "__main__":
    (n,m,p) = (int(i) for i in raw_input().split())
    d = {}
    for index, i in enumerate(raw_input().split()):
        d[index+1] = int(i)
    for j in range(m):
        (act, num) = (i for i in raw_input().split())
        if act == "A":
            d[int(num)] += 1
        else:
            d[int(num)] -= 1
    r = sorted(d.items(), key=lambda x: x[1], reverse=True)
    rr = {}
    rank = 1
    rr[r[0][0]] = rank
    for k in range(1, len(r)):
        cur = r[k]
        if cur[1] == r[k-1][1]:
            rr[cur[0]] = rr[r[k-1][0]]
        rank += 1
        rr[cur[0]] = rank
    print rr[p]

猜你喜欢

转载自blog.csdn.net/amusi1994/article/details/82713027
今日推荐