BohumLee 2021-05-13 19:31 采纳率: 80%
浏览 44
已结题

请问各位大佬,这道题目的解题方法?

题目描述
报数游戏

首先,会给他们一人一个编号,并且每个人的编号都不相同。接下来的每一回合,会给一个数,编号超过它的最小编号的人要报出自己的编号。如果没有人的编号比给出的数要大,那么编号最大的人要报出自己的编号。每个人可以重复报号。

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

输入
输入数据共 3 行。

第一行有两个整数 n,m(1≤n≤100,000,1≤m≤100,000),分别表示参与游戏的朋友的个数,和游戏的回合数。 第二行 n个整数 ai(1≤ai≤100,000,000),表示朋友们每个人的编号。对于 0≤i<j<n,都有 ai<aj,即他们的编号递增排列。 第三行 m 个整数 qi(1≤qi≤100,000,000),表示每回合给的数字。

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

  • 写回答

3条回答 默认 最新

  • 关注
    #include<iostream>
    #include<cstring>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int ai[100010], qi[100010];
    int main()
    {
    	int a, q;
    	while (cin >> a >> q)
    	{
    		for (int i = 0; i < a; i++)cin >> ai[i];
    		for (int i = 0; i < q; i++)cin >> qi[i];
    		for (int i = 0; i < q; i++) {
    			int left = 0, right = a - 1, mid;
    			while (left < right) {
    				mid = (left + right) >> 1;
    				if (ai[mid] <= qi[i])left = mid + 1;
    				else right = mid;
    			}
    			if (left - 1 < 0 || ai[left] < qi[i])left++;//qi[i]小于最小值或大于最大值的情况
    			i ? cout << " " << ai[left - 1] : cout << ai[left - 1];			
    		}
    		cout << endl;
    	}
    	return 0;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月24日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器