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 个空格分隔,行首尾不得有多余空格。

输入样例:

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

输出样例:

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

做法

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

#include<bits/stdc++.h>
using namespace std;
map<int,int> mp;//物品对应的盒子
int n,m,k;
int mp2[10010];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        int a;
        scanf("%d",&a);
        mp[i]=a;
    }
    cin>>k;
    for(int i=1;i<=k;i++){
        int a;
        scanf("%d",&a);
        //map<int,int> mp2;//同一箱子不同物品的个数
        while(a){
            mp2[mp[a]]++;
            scanf("%d",&a);
        }
        int cnt=0;
        for(int i=1;i<=10000;i++){
            if(mp2[i]) cnt++;
            
        }
        for(int i=1;i<=10000;i++){
            if(mp2[i]){
                cout<<'B'<<i<<'-'<<mp2[i];
                cnt--;
                if(cnt!=0) cout<<" ";
            }
            mp2[i]=0;
            
        }
        cout<<endl;
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值