SCP-J 25. 答案有问题?
  • 板块学术版
  • 楼主XuYueming
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/14 20:37
  • 上次更新2023/11/3 03:46:51
查看原帖
SCP-J 25. 答案有问题?
728079
XuYueming楼主2023/8/14 20:37

RT, 先放原题:

  1. 如果将 ① 处的 l >= r 条件删除(同时删除 || 使得程序能正常编译运行,下 同),程序的时间复杂度不会发生变化;而将 p > q 条件删除,程序在某些数据下 的运行效率将会明显降低。 ( )
#include<iostream>
using namespace std;
int a[100005], b[100005], n, m;
void very_quick_sort(int l, int r, int p, int q){
	if(l >= r || p > q){ // ①
		return;
	}
	int mid = (l + r) / 2;
	int p0 = p - 1;
	int q0 = q + 1;
	for(int i = p;i <= q;i ++){
		if(a[i] > mid) b[++ p0] = a[i];
		else b[-- q0] = a[i];
	}
	for(int i = p;i <= q;i ++)
		a[i] = b[i];
	very_quick_sort(mid + 1, r, p, p0);
	very_quick_sort(l, mid, q0, q);
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i ++)
		cin >> a[i];
	very_quick_sort(1, m, 1, n);
	// ②
	for(int i = 1;i <= n;i ++)
		cout << a[i] << " ";
	cout << endl;
	return 0;
}

去掉l>=r会死循环,而去掉p>q则只会影响时间复杂度。

故本题应为×,而非√。然而答案本题为√。

2023/8/14 20:37
加载中...