当前位置:   article > 正文

2022 RoboCom 世界机器人开发者大赛-高职组(国赛):智能管家_2022 robocom 世界机器人开发者大赛-高职组(国赛)

2022 robocom 世界机器人开发者大赛-高职组(国赛)

人上了年纪,记性就会变差,时常不得不翻箱倒柜找东西。智能照护中心现在请你做一个简单的智能管家程序,把老人家里的东西逐一编号,放进若干个收纳箱里。当然收纳箱也是有编号的,你的程序要记录下哪个东西放在哪个收纳箱里。当老人问起某几件东西时,你的程序要告诉老人家,东西分别放在哪些箱子里。

输入格式:

输入在第一行中给出 2 个正整数:N(≤105)是老人家藏物品的数量(所有物品从 1 到 N 编号);M(≤104 且 M<N)是收纳箱的数量(所有收纳箱从 1 到 M 编号)。随后一行给出 N 个正整数,第 i 个数字就是编号为 i 的物品所存放的收纳箱的编号。

接下来是老人的查询数据:首先在一行中给出正整数 K(≤100),为查询次数;随后 K 行,每行给出一系列要查找的物品的编号,以 0 结尾(这个数字不要处理)。

题目保证每行中的查询编号都无重复,每次至少查询一件物品,并且同一行的数字间以空格分隔。

输出格式:

对每一次查询,在一行中按照收纳箱编号的升序输出存放了被查物品的收纳箱,并且同时输出该箱内有多少件被查的物品。输出格式为 Bi-k,其中 i 是箱子编号,k 是物品个数。两只箱子的信息间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

  1. 10 5
  2. 3 4 4 1 1 5 3 3 3 4
  3. 2
  4. 8 1 2 5 0
  5. 6 0

输出样例:

  1. B1-1 B3-2 B4-1
  2. B5-1

做法

正常模拟,但我这里要讲的不是这题的做法,而是我用map居然超时了,得换为数组才行,之前老喜欢用map的就是说。能用数组尽量用数组吧。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. map<int,int> mp;//物品对应的盒子
  4. int n,m,k;
  5. int mp2[10010];
  6. int main(){
  7. scanf("%d%d",&n,&m);
  8. for(int i=1;i<=n;i++){
  9. int a;
  10. scanf("%d",&a);
  11. mp[i]=a;
  12. }
  13. cin>>k;
  14. for(int i=1;i<=k;i++){
  15. int a;
  16. scanf("%d",&a);
  17. //map<int,int> mp2;//同一箱子不同物品的个数
  18. while(a){
  19. mp2[mp[a]]++;
  20. scanf("%d",&a);
  21. }
  22. int cnt=0;
  23. for(int i=1;i<=10000;i++){
  24. if(mp2[i]) cnt++;
  25. }
  26. for(int i=1;i<=10000;i++){
  27. if(mp2[i]){
  28. cout<<'B'<<i<<'-'<<mp2[i];
  29. cnt--;
  30. if(cnt!=0) cout<<" ";
  31. }
  32. mp2[i]=0;
  33. }
  34. cout<<endl;
  35. }
  36. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号