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

【题解】报数游戏

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

【题目描述】

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

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

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

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

【输入描述】

输入数据共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;
}


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

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

分享给朋友:

相关文章

【题解】01背包

【题目描述】一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。【输入描述】第一...

【题解】Crossing River

【题目描述】几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间。【输入描述】输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间。【输出描述】输出t行数据,每行1个...

【题解】合唱队形

【题目描写】N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T...

【题解】上学线路(2019青岛市程序设计比赛)

【题解】上学线路(2019青岛市程序设计比赛)

 【题目描述】小D从家到学校的道路结构是这样的:由n条东西走向和m条南北走向的道路构成了一个n*m的网格,每条道路都是单向通行的(只能从北向南,从西向东走)。已知小D的家在网格的左上角,学校...

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

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

【题解】公路乘车(动态规划)

【题目描述】一个特别的单行街道在每公里处有一个汽车站。顾客根据他们乘坐汽车的公里使来付费。例如下表就是一个费用的单子。   没有一辆车子行驶超过10公里,一个顾客打算行驶n公里(1<...