1. 程式人生 > >【愛奇藝2018-09-15線上筆試】局長的食物

【愛奇藝2018-09-15線上筆試】局長的食物

題目描述

局長的食物 時間限制: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]