洛谷 P1571 眼红的Medusa【二分查找】 || 【map】
题目链接:https://www.luogu.org/problemnew/show/P1571
题目描述
虽然Miss Medusa到了北京,领了科技创新奖,但是他还是觉得不满意。原因是,他发现很多人都和他一样获了科技创新奖,特别是其中的某些人,还获得了另一个奖项——特殊贡献奖。而越多的人获得了两个奖项,Miss Medusa就会越眼红。于是她决定统计有哪些人获得了两个奖项,来知道自己有多眼红。
输入格式:
输入第一行,有两个数n,m,表示有n个人获得科技创新奖,m个人获得特殊贡献奖。
第二行,n个正整数,表示获得科技创新奖的人的编号
第三行,m个正整数,表示获得特殊贡献奖的人的编号
输出格式:
输出一行,为获得两个奖项的人的编号,按在科技创新奖获奖名单中的先后次序输出。
4 3
2 15 6 8
8 9 2
2 8
说明
对于60%的数据,n<=1000,m<=1000
对于100%的数据,n<=100000,m<=100000,获得奖项的人的编号在2*10^9以内
输入数据保证第二行任意两个数不同,第三行任意两个数不同。
解题分析:
首先这道题可以用map,非常方便。然后也可以用二分查找来做,因为对第二个数组用二分后,整个程序的复杂度为(nlogn)(因为还要遍历一遍第一个数组),而数据范围为10^5,所以可行。
map解法
#include<bits/stdc++.h>
using namespace std;
int n, m;
map<int, bool> mapp;
int a[], b[];
int main()
{
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++) { scanf("%d", &a[i]); }
for (int i = ; i <= m; i++) { scanf("%d", &b[i]); mapp[b[i]] = true; }//建立映射关系
for (int i = ; i <= n; i++) if (mapp[a[i]]) cout << a[i] << " ";//如果出现过直接输出
return ;
}
二分查找
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n, k, a[], b[];
int main()
{
scanf("%d%d", &n, &k);
for (int i = ; i <= n; i++)scanf("%d", &a[i]);
for (int i = ; i <= k; i++)scanf("%d", &b[i]);
sort(b + , b + + k);
for (int i = ; i <= n; i++)
{
int low = , high = k;
while (low <= high)//二分,查找是否有相同元素
{
int mid = (low + high) / ;
if (b[mid] == a[i])
{
cout << a[i] << " ";
break;
}
else if (b[mid]<a[i])low = mid + ;
else high = mid - ;
}
}
return ;
}
2018-05-27
洛谷 P1571 眼红的Medusa【二分查找】 || 【map】的更多相关文章
- 洛谷 P1571 眼红的Medusa
P1571 眼红的Medusa 题目描述 虽然Miss Medusa到了北京,领了科技创新奖,但是他还是觉得不满意.原因是,他发现很多人都和他一样获了科技创新奖,特别是其中的某些人,还获得了另一个奖项 ...
- 洛谷 1571 眼红的Medusa
洛谷 1571 眼红的Medusa 虽说这道题标签里写明了二分,然而我还是首先想到了map......毕竟map真的是简单好写. map做法 #include<bits/stdc++.h> ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
- 洛谷 P1083 借教室【二分+差分/线段树】
二分mid,然后用1~mid的操作在差分序列上加减,最后把差分序列前缀和起来,看是否有有超过初始r值的 #include<iostream> #include<cstdio> ...
- 洛谷P1462-通往奥格瑞玛的道路-二分+最短路
洛谷P1462-通往奥格瑞玛的道路 题目描述 在艾泽拉斯,有\(n\)个城市.编号为\(1,2,3,...,n\). 城市之间有\(m\)条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联 ...
- LOJ 2555 & 洛谷 P4602 [CTSC2018]混合果汁(二分+主席树)
LOJ 题目链接 & 洛谷题目链接 题意:商店里有 \(n\) 杯果汁,第 \(i\) 杯果汁有美味度 \(d_i\),单价为 \(p_i\) 元/升.最多可以添加 \(l_i\) 升.有 \ ...
- [洛谷P3939]:数颜色(二分)
题目传送门 题目描述 小$C$的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有相同的颜色.小$C$把她标号从$1$到$n$的$n$只兔子排成长长的一排,来给他们喂胡萝卜吃.排列 ...
- 洛谷P1991无线通讯网[kruskal | 二分答案 并查集]
题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...
- 洛谷P1462 通往奥格瑞玛的道路[二分答案 spfa 离散化]
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
随机推荐
- d2-admin中那些不错的技巧
d2-admin基于vue-cli3 路由相关 刷新路由,参照官方 组件内的守卫 但是搞不明白为何加了句 render:h => h() { path: 'refresh', name: 'r ...
- 发送http请求的方法
在http/1.1 协议中,定义了8种发送http请求的方法 get post options head put delete trace connect patch. 根据http协议的设计初衷,不 ...
- QT中QString 与 int float double 等类型的相互转换
Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...
- linux新内核的freeze框架以及意义【转】
转自:https://blog.csdn.net/dog250/article/details/5303442 linux的电源管理发展非常迅速,比如在挂起到内存的时候,系统会冻结住所有的进程,也就是 ...
- 手把手教你写makefile【原创】
Makefile 编写 Make -f makefile1 指定 如下是 本人的一点makefile学习笔记,再分享一个不错的写makefile总结的网址: http://www.cnblogs ...
- setInterval的用法
function show1(){ console.log("每隔1秒显示一次");}function show2(str){ console.log(str);}se ...
- 路由器中继(repeater)模式 和 AP+WDS模式区别?
理论上的 中继(repeater)模式, 只有连接的最后一个才会有信号发出,中间的连接节点是没有信号发出的. AP+WDS模式:就是每一个路由都有信号发出,可以进行信号的全方位覆盖.
- shell脚本中冒号
格式:: your comment here 格式:# your comment here 写代码注释(单行注释). 例如: 格式:: 'comment line1 comment line2 mor ...
- log4j2配置文件log4j2.xml
原地址:https://www.cnblogs.com/hafiz/p/6170702.html 1.关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.proper ...
- PYTHON-操作系统基础-2-练习
#===============================================# # 1.简述cpu.内存.硬盘的作用# cpu是人的大脑,负责控制全身和运算# 内存是人的记忆,负责 ...