枪打鸟的问题

E - Gunner
Time Limit:4000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Description

Long long ago, there is a gunner whose name is Jack. He likes to go hunting very much. One day he go to the grove. There are $n$ birds and $n$ trees. The $i-th$ bird stands on the top of the $i-th$ tree. The trees stand in straight line from left to the right. Every tree has its height. Jack stands on the left side of the left most tree. When Jack shots a bullet in height H to the right, the bird which stands in the tree with height $H$ will falls.  
Jack will shot many times, he wants to know how many birds fall during each shot.  

a bullet can hit many birds, as long as they stand on the top of the tree with height of $H$.
 

Input

There are multiple test cases (about 5), every case gives $n,m$ in the first line, $n$ indicates there are $n$ trees and $n$ birds, $m$ means Jack will shot $m$ times.  

In the second line, there are $n$ numbers $h[1],h[2],h[3],…,h[n]$ which describes the height of the trees.  

In the third line, there are m numbers $q[1],q[2],q[3],…,q[m]$ which describes the height of the Jack’s shots.  

Please process to the end of file.  

[Technical Specification]  

$1 \leq n,m \leq 1000000(10^{6})$  

$1 \leq h[i],q[i] \leq 1000000000(10^{9})$  

All inputs are integers.
 

Output

For each $q[i]$, output an integer in a single line indicates the number of birds Jack shot down.
 

Sample Input

     
     
4 3 1 2 3 4 1 1 4
 

Sample Output

     
     
1 0 1

Hint

Huge input, fast IO is recommended. 
         
 


分别表示的是,第一行那只鸟分别在不同的n只树上,然后猎人站在不同的高度去打鸟,与鸟相同的高度就可以打到鸟,,
如果两次均在同一个高度打鸟则只有第一次可以打到鸟。
以下是代码:


#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <map>
#include <cstdio>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
map<int ,int >p;   //建立一个map,p
p.clear();
int i,j,a,b;
for(i=0;i<n;i++)
{
    scanf("%d",&a);  //鸟的位置
    p[a]++;       //鸟
}
for(j=0;j<m;j++)
{
    scanf("%d",&b);
    printf("%d\n",p[b]);  //输出打到的鸟的个数
    p[b]=0;          //如果这个高度被打到过鸟则此处鸟数为0;
} 

}
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值