人上了年紀,記性就會變差,時常不得不翻箱倒柜找東西。智能照護中心現在請你做一個簡單的智能管家程序,把老人家里的東西逐一編號,放進若干個收納箱里。當然收納箱也是有編號的,你的程序要記錄下哪個東西放在哪個收納箱里。當老人問起某幾件東西時,你的程序要告訴老人家,東西分別放在哪些箱子里。
輸入格式:
輸入在第一行中給出 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;}
}