【愛奇藝2018-09-15線上筆試】局長的食物
阿新 • • 發佈:2018-12-10
題目描述
局長的食物 時間限制: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]