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. Oracle(15)什么是索引(Index)?

    2024-07-10 07:50:05       0 阅读
  2. CSS 的@media规则,响应式的一种解决方案

    2024-07-10 07:50:05       0 阅读

热门阅读

  1. 基于go 1.19的站点模板爬虫

    2024-07-10 07:50:05       6 阅读
  2. Pandas在生物信息学中的应用详解

    2024-07-10 07:50:05       8 阅读
  3. DOM XMLHttpRequest

    2024-07-10 07:50:05       6 阅读
  4. nginx详解

    2024-07-10 07:50:05       6 阅读
  5. vue实现表单输入框数字类型校验功能

    2024-07-10 07:50:05       9 阅读
  6. Perl 语言入门学习

    2024-07-10 07:50:05       8 阅读
  7. perl语言入门学习

    2024-07-10 07:50:05       9 阅读