题目链接:http://acm.zjut.edu.cn/onlinejudge/problem.php?cid=1101&pid=5
题面:
Problem F: 数数字
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 550 Solved: 56
[ Submit][ Status][ Web Board]
Description
t_xliang非常讨厌数数字,这点居然被xsj4cs发现了。可恶的xsj4cs竟然用程序随机生成了一大堆数字叫t_xliang数!
给定一个由整数组成的多重集(元素可重复),现在有若干个查询,每个查询包含一个整数x,求这个x在集合中出现的次数
Input
多组数据,每组数据第一行是一个整数n(n<=100000)
接下来n行,每行一个整数x(0<=x<=10^16),表示集合中的元素.
接下来一个整数m(m<=100000)
接下来m行,每行一个整数y,(0<=y<=10^16) 表示查询。
Output
对于每个查询输出一个整数,表示出现的次数
Sample Input
10
1
2
3
3
5
5
6
6
9
9
5
1
2
3
4
5
Sample Output
1
1
2
0
2
HINT
1.当整数超过2^31,又小于2^63时,可用long long表示(VC6.0编译通不过的,试试__int64,但提交时请改回long long)
2.数据输入量大,考虑用scanf输入,格式为
scanf("%d",&n); //n为int型
scanf("%lld",&n); //n为long long型
题解:裸的map,就是读入的时候小心点就行。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <iomanip>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
int n,m;
long long int tmp;
while(scanf("%d",&n)!=EOF)
{
map <long long int,int> store;
for(int i=0;i<n;i++)
{
scanf("%lld",&tmp);
store[tmp]++;
}
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%lld",&tmp);
printf("%d\n",store[tmp]);
}
}
return 0;
}