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

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。