美文网首页
[08]小熊吃糖-拼多多2018秋

[08]小熊吃糖-拼多多2018秋

作者: jdzhangxin | 来源:发表于2018-10-21 18:16 被阅读29次

1.题目描述

n只小熊,他们有着各不相同的战斗力。每次他们吃糖时,会按照战斗力来排,战斗力高的小熊拥有优先选择权。前面的小熊吃饱了,后面的小熊才能吃。每只小熊有一个饥饿值,每次进食的时候,小熊们会选择最大的能填饱自己当前饥饿值的那颗糖来吃,可能吃完没饱会重复上述过程,但不会选择吃撑。 现在给出n只小熊的战斗力和饥饿值,并且给出m颗糖能填饱的饥饿值。 求所有小熊进食完之后,每只小熊剩余的饥饿值。

  • 输入描述:
    第一行两个正整数nm,分别表示小熊数量和糖的数量。(n <= 10, m <= 100) 第二行m个正整数,每个表示着颗糖能填充的饥饿值。 接下来的n行,每行2个正整数,分别代表每只小熊的战斗力和当前饥饿值。 题目中所有输入的数值小于等于100
  • 输出描述:
    输出n行,每行一个整数,代表每只小熊剩余的饥饿值。
  • 输入示例:
    2 5
    5 6 10 20 30
    4 34
    3 35
    
  • 输出示例:
    4
    0
    
  • 说明
    第一只小熊吃了第5颗糖(30)
    第二只小熊吃了第4颗糖(20)
    第二只小熊吃了第3颗糖(10)
    第二只小熊吃了第1颗糖(5)

2.题目解析

需要用到排序算法:按战斗力对小熊们排序;按能填充的饥饿值对糖排序。
注意

  1. 最终答案需要按照小熊输入的顺序进行输出,在排序之后要记录一下这个信息。
  2. 一个小熊可能会吃多块糖

3.参考答案

#include <bits/stdc++.h>
using namespace std;
// 小熊结构体
struct Bear{
  int finger; // 战斗力
  int hunger; // 饥饿值
  int id;     // 编号
};
bool cmpBear(Bear a,Bear b){
    return a.finger > b.finger;
}
bool cmpBearById(Bear a,Bear b){
    return a.id < b.id;
}
bool cmpSugar(int a,int b){
    return a > b;
}
int main() {
   int n = 0;// 小熊数量
   int m = 0;// 糖数
   scanf("%d%d",&n,&m);
   int sugars[m];
   for(int i=0;i<m;++i){
       scanf("%d",&sugars[i]);
   }
   Bear bears[n];
   for(int i=0;i<n;++i){
       scanf("%d%d",&bears[i].finger,&bears[i].hunger);
       bears[i].id = i; // 记录进入的顺序
   }
   // 糖果按照大小排序
   sort(sugars,sugars+m,cmpSugar);
   // 小熊按照战斗力排序
   sort(bears,bears+n,cmpBear);
   
   for(int i=0;i<n;++i){
       for(int j=0;j<m;++j){
           if(sugars[j] != 0 && bears[i].hunger >= sugars[j]){
               // bears[i].hunger = bears[i].hunger - sugars[j];
               bears[i].hunger -= sugars[j];
               sugars[j] = 0;
           }
       }
   }
   sort(bears,bears+n,cmpBearById);// 按照进入顺序重新排序
   for(int i=0;i<n;++i){
       printf("%d\n",bears[i].hunger);
   }
   
   return 0;
}
#include <bits/stdc++.h>
using namespace std;
// 小熊结构体
struct Bear{
  int finger; // 战斗力
  int hunger; // 饥饿值
  int id;     // 编号
};
bool cmpBear(Bear a,Bear b){
    return a.finger > b.finger;
}
bool cmpBearById(Bear a,Bear b){
    return a.id < b.id;
}
bool cmpSugar(int a,int b){
    return a > b;
}
int main() {
   int n = 0;// 小熊数量
   int m = 0;// 糖数
   scanf("%d%d",&n,&m);
   int sugars[m];
   for(int i=0;i<m;++i){
       scanf("%d",&sugars[i]);
   }
   Bear bears[n];
   for(int i=0;i<n;++i){
       scanf("%d%d",&bears[i].finger,&bears[i].hunger);
       bears[i].id = i; // 记录进入的顺序
   }
   // 糖果按照大小排序
   sort(sugars,sugars+m,cmpSugar);
   // 小熊按照战斗力排序
   sort(bears,bears+n,cmpBear);
   // 记录糖果是否被吃了
   bool eated[m];
   fill_n(eated,m,false);
   
   for(int i=0;i<n;++i){
       for(int j=0;j<m;++j){
           if(eated[j] == false && bears[i].hunger >= sugars[j]){
               // bears[i].hunger = bears[i].hunger - sugars[j];
               bears[i].hunger -= sugars[j];
               eated[j] = true;
           }
       }
   }
   sort(bears,bears+n,cmpBearById);// 按照进入顺序重新排序
   for(int i=0;i<n;++i){
       printf("%d\n",bears[i].hunger);
   }
   
   return 0;
}
#include <bits/stdc++.h>
using namespace std;
// 小熊结构体
struct Bear{
  int finger; // 战斗力
  int hunger; // 饥饿值
  int id;     // 编号
};
struct Sugar{
  int value; // 糖果数值
  bool eated; // 是否被吃掉
};
bool cmpBear(Bear a,Bear b){
    return a.finger > b.finger;
}
bool cmpBearById(Bear a,Bear b){
    return a.id < b.id;
}
bool cmpSugar(Sugar a,Sugar b){
    return a.value > b.value;
}
int main() {
   int n = 0;// 小熊数量
   int m = 0;// 糖数
   scanf("%d%d",&n,&m);
   Sugar sugars[m];
   for(int i=0;i<m;++i){
       scanf("%d",&sugars[i].value);
       sugars[i].eated = false;
   }
   Bear bears[n];
   for(int i=0;i<n;++i){
       scanf("%d%d",&bears[i].finger,&bears[i].hunger);
       bears[i].id = i; // 记录进入的顺序
   }
   // 糖果按照大小排序
   sort(sugars,sugars+m,cmpSugar);
   // 小熊按照战斗力排序
   sort(bears,bears+n,cmpBear);
   
   for(int i=0;i<n;++i){
       for(int j=0;j<m;++j){
           if(sugars[j].eated == false && bears[i].hunger >= sugars[j].value){
               // bears[i].hunger = bears[i].hunger - sugars[j];
               bears[i].hunger -= sugars[j].value;
               sugars[j].eated = true;
           }
       }
   }
   sort(bears,bears+n,cmpBearById);// 按照进入顺序重新排序
   for(int i=0;i<n;++i){
       printf("%d\n",bears[i].hunger);
   }
   
   return 0;
}
#include <algorithm>
#include <cstdio>
using namespace std;

struct Bear {
  int fight; // 战斗力
  int hunger; // 饥饿值
  int id;    // 序号
};
bool cmp(Bear& a,Bear& b){
  return a.fight > b.fight;
}

int main() {
  int n = 0; // 小熊数量
  int m = 0; // 糖的数量
  scanf("%d %d", &n, &m);

  // 获取糖果
  int a[m];
  for (int i = 0; i < m; ++i) {
    scanf("%d", &a[i]);
  }

  // 获取小熊战斗力和饥饿值信息
  Bear b[n];
  for (int i = 0; i < n; ++i) {
    scanf("%d %d", &b[i].fight, &b[i].hunger);
    b[i].id = i; // 保存录入编号
  }

  // 小熊按照战斗力排序
  sort(b, b + n,cmp);
 
  // 根据战斗力分配糖果
  int res[n];  // 小熊剩余饥饿值
  bool v[m];   // 糖果是否被吃了
  fill_n(v,m,false); // false默认糖果未被吃
  for (int i = 0; i < n; ++i) { // 遍历战斗力排序后的小熊
    int index = -1;// 表示找到糖的ID小于饥饿值最大的糖
    for (int j = 0; j < m; ++j) { // 遍历糖
      // 选择小熊
      if (!v[j]                               // 糖果未被吃
          && b[i].hunger >= a[j]              // 小熊能吃的下糖
          && (index == -1 || a[j] > a[index]) // 第一个被吃的糖或者最大可被吃的糖
      ) {
        index = j;
      }
    }

    // 已经找到糖
    if (index != -1) {
      b[i].hunger -= a[index]; // 减少饥饿值
      v[index] = true; // 表示糖果已经被吃了
      --i;
    } else {
      // 没有找到糖保留饥饿值
      res[b[i].id] = b[i].hunger;
    }
  }

  // 输出剩余的饥饿值
  for (int i = 0; i < n; ++i) {
    printf("%d\n", res[i]);
  }
  return 0;
}

牛客题目

相关文章

  • [08]小熊吃糖-拼多多2018秋

    1.题目描述 有n只小熊,他们有着各不相同的战斗力。每次他们吃糖时,会按照战斗力来排,战斗力高的小熊拥有优先选择权...

  • 拼多多-小熊吃糖

    有n只小熊,他们有着各不相同的战斗力。每次他们吃糖时,会按照战斗力来排,战斗力高的小熊拥有优先选择权。前面的小熊吃...

  • 拼多多再升级,试水医药电商有戏吗?

    拼多多再升级,试水医药电商有戏吗? 2018年11月01日 08:30:24来源:网络资料整理 拼多多发迹的模式在...

  • 母女睡前故事(五)爱吃糖的小熊

    第五晚:爱吃糖的小熊 女儿规定的内容梗概:小熊喜欢吃糖,有一天晚上 ,小熊又吃糖了 然后牙痛了。到医院医生把小熊牙...

  • 小熊拔牙

    有一天,小熊想吃糖,他就每天都吃糖。第四天,小熊觉得牙疼。他去医院里,医生让小熊张开嘴,“啊……” ...

  • 读入一个数列和N值,返回按优先级排序的N个数 满足...Pyth

    拼多多2019.09.01秋招笔试 算法工程师

  • 拼多多的前世今生

    拼多多走进大众视野,并且引起别人所重视,除了拼多多铺天盖地的广告,还在于拼多多与2018年7月26号在美国纳斯达克...

  • [21]列表补全-拼多多2018秋

    1.题目描述 在商城的某个位置有一个商品列表,该列表是由L1、L2两个子列表拼接而成。当用户浏览并翻页时,需要从列...

  • [31]周年庆-拼多多2018秋

    1.题目描述 拼多多王国的城市和道路的拓扑结构比较特别,是一个树状结构: 每个城市是树的一个节点; 城市之间的道路...

  • 拼多多是好企业 - 草稿

    谢谢主席,评委,大家好: 我方认为“拼多多是好企业”。 2018年拼多多因涉嫌售假被勒令整改,一时间,拼多多因此背...

网友评论

      本文标题:[08]小熊吃糖-拼多多2018秋

      本文链接:https://www.haomeiwen.com/subject/tcguoftx.html