题意 有一个错误的二分查找代码,题目输入三个数: 如果 ,则输出能够使此二分查找正确的数组 如果 ,则输出使其出错的数组 要求输出满足条件、且字典序最小的数组 题解 题目不
题意
- 有一个错误的二分查找代码,题目输入三个数:
- 如果,则输出能够使此二分查找正确的数组
- 如果,则输出使其出错的数组
- 要求输出满足条件、且字典序最小的数组
题解
- 题目不难,稍加分析即可发现,此二分查找算法中,区间形式为:左闭右开。对于相等元素,直接越过了。
- 所以只要数组中有和带查找元素相等的值,就会出错;反之,没有和
- 注意输出字典序最小的。
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;
}