你疑惑的这里都有
查看原帖
你疑惑的这里都有
854995
flyWang楼主2023/10/29 16:21
  1. wa#4 注意,题目中这句话----n是正整数,因此l = 1,而不是0,这是wa#4的原因

2.wa#10,11,17 - 20的原因

这题对于n没有明确说明范围,实际上是LLONG_MAX,同时,这说明还得开long long

3.开了long long发现wa#3,4

注意,别用l + r >> 1,这会越界,并且,这实际上是不等同于 / 2,是需要考虑符号位的

4.对于啥时候输出-1

注意,这个解题数是必须 = k的!!,不要被二分后的ans = mid迷惑,ans是代表n的范围,和 解题数没有任何关系,你需要的是,注意,把check函数return的值改成int,只有当 解题数= k的时候return一个特定值,此时才 ans = mid ,看不懂? 那就看代码!

	int ans = -1;
	while (l <= r) {
		int mid = l + (r - l) / 2;
		int t = check(mid);
		if (t) {
			if (t == 2)
				ans = mid;
			r = mid - 1;
		}
		else l = mid + 1;
	}

因此,判定是否无答案就是 ans 是否 等于-1

5.如果还是错,就说明是二分答案模板有问题 本题在找最小答案的时候,应该是 r = mid - 1,让r向左移,这样才能找到第一个符合答案的最小值 找最大答案就是l = mid + 1,让l向右走,找最后一个符合答案的最大值

2023/10/29 16:21
加载中...