九度oj 題目1416:猴子吃堅果

weixin_30639719發表於2020-04-05
題目描述:

 

動物園的猴子吃堅果的順序都是按強壯程度來定的,最強壯的吃完才能輪到下一個,現在我們給出各個猴子的名字,強壯程度,吃飽的量,然後查詢對應的猴子必須要扔多少堅果才可以輪到。

 

 

輸入:

 

輸入有多組,對於每組輸入:

輸入的第一行包括兩個整數n(1<=n<=10000),代表動物園中猴子的個數,以及m(1<=m<=10000),代表我們要查詢的次數。

        接下來的n行,每行包括一個字串(代表猴子的名字,長度1<=len<=100),一個整數a(1<=a<=10000),代表猴子的強壯程度,一個整數b(1<=b<=10000),代表猴子吃飽所需要的食物量。

 

 

輸出:

         對於每次查詢,輸出最少需要多少食物,被查詢的這隻猴子才能吃到食物。

 

 

 

樣例輸入:
3 2
monkey_a 4 2
monkey_b 3 4
monkey_c 5 3
monkey_a
monkey_c
4 2
monkey_a 4 2
monkey_b 3 4
monkey_c 5 3
monkey_d 5 3
monkey_a
monkey_c

樣例輸出:
4
1
7
1


這題沒啥,就是個排序
程式碼如下
 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 struct Monkey
 7 {
 8     char name[102];
 9     int strong, cost;
10 };
11 Monkey mon[10002];
12 
13 int cmp(Monkey a, Monkey b) {
14     if(a.strong == b.strong) {
15         return strcmp(a.name, b.name);
16     }
17     else {
18         return a.strong > b.strong;
19     }
20 }
21 
22 int n,m;
23 int dp[10002];
24 int main(int argc, char const *argv[])
25 {
26     freopen("input.txt","r",stdin);
27     while(scanf("%d %d",&n,&m) != EOF) {
28         for(int i = 0; i < n; i++) {
29             scanf("%s %d %d",mon[i].name, mon[i].strong, mon[i].cost);
30         }
31         sort(mon, mon+n, cmp);
32         memset(dp, 0, sizeof(dp));
33         dp[0] = 1;
34         for(int i = 1; i < n; i++) {
35             dp[i] = dp[i-1] + mon[i-1].cost;
36         }
37         while(m--) {
38             char tmp[102];
39             scanf("%s",tmp);
40             int ans = 0;
41             for(int i = 0; i < n; i++) {
42                 if(strcmp(tmp,mon[i].name) == 0) {
43                     ans = dp[i];
44                     break;
45                 }
46             }
47             printf("%d\n",ans);
48         }
49     }
50     return 0;
51 }

 

轉載於:https://www.cnblogs.com/jasonJie/p/5837120.html

相關文章