【map】【HDOJ】5233 Gunner II

http://acm.hdu.edu.cn/showproblem.php?pid=5233

外面有很多树,每棵树顶上有一只鸟,一个数组按从近到远的顺序列出这些树的高度(也就是鸟的高度)

猎人开始从不同高度打枪,子弹不能穿过鸟,也就是在同一高度上只有最近的鸟会被打下来。

给出一个数组表示猎人每次打枪的高度,要求出每次打落的鸟所在的树的编号(从1开始编号),如果这个高度上没有鸟输出-1

放一个MAP表示每个高度上从近到远的鸟的位置编号,

猎人每次射击就将该高度的定位数向后移,直到定位数大于鸟的数量,就输出-1

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 typedef vector<int> vec;
 5 map<int, vec> b;
 6 map<int, int> pos;
 7 int n, m, shot;
 8
 9 int main(){
10     while(~scanf("%d%d", &n, &m)){
11         b.clear();
12         pos.clear();
13         for(int i = 1; i <= n; i++){
14             int h;
15             scanf("%d", &h);
16             b[h].push_back(i);
17             pos[h] = 0;
18         }
19         map<int, vec>::iterator it;
20         while(m--){
21             scanf("%d", &shot);
22             it = b.find(shot);
23             if(it != b.end()){
24                 int p = it->first;
25                 int l = it->second.size();
26                 if(pos[p] < l){
27                     printf("%d\n", it->second[pos[p]]);
28                     pos[p]++;
29                 }
30                 else printf("-1\n");
31             }
32             else{
33                 printf("-1\n");
34             }
35         }
36     }
37
38     return 0;
39 }
时间: 2024-10-14 08:40:41

【map】【HDOJ】5233 Gunner II的相关文章

【map离散化+打表】UVA 11995 I Can Guess the Data Structure!

[map离散化+打表]UVA 11995 I Can Guess the Data Structure! map关联容器:有序 + 映射,查找的复杂度O(nlogn) 题目大意 给你n个数构成的数组,求数v第k次出现的下标值(下标从1开始) – 说一下思路 这题很显然要打表预处理,关键是怎么打这张表 1.首先我们观察到v很大,开一个二维数组data[v][k]肯定存储不了,所以用map离散化(自动有序编号,避免空间浪费) 2.data[v]肯定是一个变长的数组,存储数据v出现0,1,2次--的下

STL HDOJ 5233 Gunner II

题目传送门 1 /* 2 题意:查询x的id,每次前排的树倒下 3 使用lower_bound ()查找高度,f[i]记录第一棵高度为x树的位置,查询后+1(因为有序) 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 using namespace std; 9 10 const int MAXN = 1e5 + 10; 11 const int INF = 0x3f3f3f3

hdu 5233 Gunner II 离散化

Gunner II Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5233 Description 很久很久以前,有一个叫Jack的枪手.他非常喜欢打猎.一天,他去了一个小树林.那儿有n只鸟,还有n棵树.第i只鸟站在第i棵树的顶端.这些树从左到右排成一条直线.每一棵树都有它的高度.Jack站在最左边那棵树的左边.当Jack在高度为H的地方向右发射一棵子弹时,站在高度为

hdu 5233 Gunner II (bc #42 B)

Gunner II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1433    Accepted Submission(s): 540 Problem Description Long long ago, there was a gunner whose name is Jack. He likes to go hunting ver

hdu 5233 Gunner II 【set+map】

题意不说了,之所以贴代码是因为想说容器是个很好的东西 #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<set> #include<map> using namespace std; map<int,set<int> >mp; set<int>::iterator it; int

hdu 5233 Gunner II

开始试了很多方法,不过由于删除的效率导致tle,总之无论什么方法,能ac就是好方法 #include<iostream> #include<vector> #include<map> using namespace std; vector<int>mapp[100000+5]; map<int,int>root; int he[100000+5]; int main() { int n,m; cin.sync_with_stdio(false);

HDU 5233 Gunner II (二分)

问题描述 很久很久以前,有一个叫Jack的枪手.他非常喜欢打猎.一天,他去了一个小树林.那儿有n只鸟,还有n棵树.第i只鸟站在第i棵树的顶端.这些树从左到右排成一条直线.每一棵树都有它的高度.Jack站在最左边那棵树的左边.当Jack在高度为H的地方向右发射一棵子弹时,站在高度为H的树上且离Jack最近的鸟儿就会落下来. Jack会射击多次,他想知道每次射击哪只鸟儿会落下来. 输入描述 多组测试数据(大概5组),每一组的第一行给出n,m,n表示有n棵树和n只鸟,m表示Jack会射击m次. 在第二

HDU ACM 5233 Gunner II

分析:借助STL的multiset实现,很方便. #include<iostream> #include<set> using namespace std; class Node { public: Node(int _h=0,int _pos=0):h(_h),pos(_pos) //注意_h一定要在_pos的前面,方便lower_bound的调用 { } int pos,h; }; struct cmp //仿函数 { bool operator()(const Node&am

【HDOJ】3509 Buge&#39;s Fibonacci Number Problem

快速矩阵幂,系数矩阵由多个二项分布组成.第1列是(0,(a+b)^k)第2列是(0,(a+b)^(k-1),0)第3列是(0,(a+b)^(k-2),0,0)以此类推. 1 /* 3509 */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #incl