Problem L. Omar’s Bug【分类讨论】

在这里插入图片描述
在这里插入图片描述


题意

  • 有一个错误的二分查找代码,题目输入三个数: n , x , y n,x,y n,x,y ,分别是:数组长度,查找元素,判断值。
  • 如果 y = 1 y=1 y=1,则输出能够使此二分查找正确的数组
  • 如果 y = 2 y=2 y=2,则输出使其出错的数组
  • 要求输出满足条件、且字典序最小的数组

题解

  • 题目不难,稍加分析即可发现,此二分查找算法中,区间形式为:左闭右开。对于相等元素,直接越过了。
  • 所以只要数组中有和带查找元素 x x x 相等的值,就会出错;反之,没有和 x x x 相等的元素,查找不会出错。
  • 注意输出字典序最小的。
  • x < = n   & &   y = 1 : − −   1.2.3.... ( x − 1 ) . ( x + 1 ) . . . . ( n + 1 ) x<=n \ \&\&\ y=1:-- \ 1.2.3....(x-1).(x+1)....(n+1) x<=n && y=1: 1.2.3....(x1).(x+1)....(n+1)
  • x > n   & &   y = 1     :   − − 1.2.3.... n x>n \ \&\& \ y=1\ \ \ :\ --1.2.3....n x>n && y=1   : 1.2.3....n
  • x < = n   & &   y = 2 :   − − 1.2.3.... n x<=n\ \&\&\ y=2:\ --1.2.3....n x<=n && y=2: 1.2.3....n
  • x > n   & &   y = 2     :   − − 1.2.3.... ( n − 1 ) . x x>n\ \&\&\ y=2\ \ \ :\ --1.2.3....(n-1).x x>n && y=2   : 1.2.3....(n1).x

AC-Code

#include <bits/stdc++.h>
using namespace std;

int main() {
	int T;	cin >> T;
	while (T--) {
		int n, x, y;	cin >> n >> x >> y;
		if (x <= n && y == 1) {
			for (int i = 1; i <= x - 1; ++i)	cout << i << " ";
			for (int i = x + 1; i <= n; ++i)	cout << i << " ";
			cout << n + 1;
		}
		else if (x > n && y == 1) {
			for (int i = 1; i <= n - 1; ++i)	cout << i << " ";
			cout << n;
		}
		else if (x <= n && y == 2) {
			for (int i = 1; i <= n - 1; ++i)	cout << i << " ";
			cout << n;
		}
		else if (x > n && y == 2) {
			for (int i = 1; i <= n - 1; ++i)	cout << i << " ";
			cout << x;
		}
		cout << endl;
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值