当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-07-13
题意 有一个错误的二分查找代码,题目输入三个数: 如果 ,则输出能够使此二分查找正确的数组 如果 ,则输出使其出错的数组 要求输出满足条件、且字典序最小的数组 题解 题目不


Problem L. Omar’s Bug【分类讨论】_二分查找


Problem L. Omar’s Bug【分类讨论】_字典序_02


题意

  • 有一个错误的二分查找代码,题目输入三个数:Problem L. Omar’s Bug【分类讨论】_算法_03
  • 如果Problem L. Omar’s Bug【分类讨论】_字典序_04,则输出能够使此二分查找正确的数组
  • 如果Problem L. Omar’s Bug【分类讨论】_二分查找_05,则输出使其出错的数组
  • 要求输出满足条件、且字典序最小的数组

题解

  • 题目不难,稍加分析即可发现,此二分查找算法中,区间形式为:左闭右开。对于相等元素,直接越过了。
  • 所以只要数组中有和带查找元素Problem L. Omar’s Bug【分类讨论】_二分查找_06相等的值,就会出错;反之,没有和Problem L. Omar’s Bug【分类讨论】_二分查找_06
  • 注意输出字典序最小的。
  • Problem L. Omar’s Bug【分类讨论】_数组_08
  • Problem L. Omar’s Bug【分类讨论】_二分查找_09
  • Problem L. Omar’s Bug【分类讨论】_二分查找_10
  • Problem L. Omar’s Bug【分类讨论】_数组_11

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;
}


上一篇:JAVA关键字总结
下一篇:没有了
网友评论