当前位置:首页 > 题解目录 > 正文内容

【题解】报数游戏

亿万年的星光4年前 (2022-03-26)题解目录9689

【题目描述】

路飞在和他朋友们一块玩一个游戏。由于路飞的机智,这个游戏由路飞担任裁判。

首先,路飞会给他们一个人一个编号,并且每个人的编号都不相同。接下来的每一个回合,会给一个数,编号不超过它的最大编号

的人要报出自己的编号。如果没有人的编号比路飞给出的数要小,那么编号最小的人要报出自己的编号。每个人可以重复报号。

路飞会按照一个列表顺次报出每个回合的数,他的朋友们想知道每回合报出的编号应该是多少?

【输入描述】

输入数据共3行。

第一行有两个整数n,m( 1<=n<=10, 1<=m<=105 ),分别表示参与游戏的路飞朋友的个数和游戏回合数。

第二行n个整数 ai (1<=ai<=108) ,表示朋友们每个人的编号。对于 0<=i<j<n, 都有 ai<aj,即他们的编号递增排列。

第三行m个整数 qi(1 <= qi <=108), 表示每回合路飞给的数字。

【输出描述】

 输出共一行m个整数,表示每回合报出的编号,每两个整数之间一个空格,最后一个数后面没有空格。

【样例输入】

5 5
1 5 10 15 20
3 6 12 18 24

【样例输出】

1 5 10 15 20

【题目分析】


【参考代码】

#include<iostream>
using namespace std;
int a[100005];

int ans(int l, int r, int x) {
	while(l < r)  {
		int mid = l + r+1 >> 1;
		if(a[mid] <= x)
			l = mid;
		else
			r = mid - 1;
	}
	return a[l];
}
int main() {
	int n, m;
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	int t;
	for(int i = 1; i <= m; i++) {
		cin >> t;
		if(i != m)
			cout << ans(1, n, t) << ' ';
		else
			cout << ans(1, n, t);
	}
	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】车辆管理

【题目描述】交通管理局长氓氓现在需要一个管理汽车的系统,每一辆汽车都有许多信息需要去记录。 首先,每一辆汽车都有一个独一无二的车牌号 S,车牌号由 7 个字符组成。 然后,对于每一辆车要记录它的排...

整理药名

【题目描述】医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。如将ASPIRIN、...

分数求和

题目描述】输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。如: 5/6  、 10/3  均是最简形...

【题解】后缀表达式的值

【题解】后缀表达式的值

【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标...

【题解】单词接龙

【题目描述】单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重...

【题解】二分法查找左边界

参考代码:# include <bits/stdc++.h> using namespace std; int a[100005];&...