人上了年纪,记性就会变差,时常不得不翻箱倒柜找东西。智能照护中心现在请你做一个简单的智能管家程序,把老人家里的东西逐一编号,放进若干个收纳箱里。当然收纳箱也是有编号的,你的程序要记录下哪个东西放在哪个收纳箱里。当老人问起某几件东西时,你的程序要告诉老人家,东西分别放在哪些箱子里。
输入格式:
输入在第一行中给出 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
代码长度限制
16 KB
Java (javac)
时间限制
1800 ms
内存限制
512 MB
其他编译器
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
C++代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[n];
for(int i=1;i<=n;i++){
int tmp;
cin>>tmp;
a[i]=tmp;
}
int k;
cin>>k;
for(int i=0;i<k;i++){
int b;
cin>>b;
int d[100005]={0};
while(b!=0){
int c=a[b];
d[c]++;
cin>>b;
}
bool first =true;
for(int i=1;i<=m;i++){
if(d[i]!=0){
if(first){
cout<<"B"<<i<<"-"<<d[i];
first =false;
}else{
cout<<" B"<<i<<"-"<<d[i];
}
}
}
cout<<endl;
}
return 0;
}