题目的样例有漏洞,其实
查看原帖
题目的样例有漏洞,其实
1053418
yuan4517楼主2023/8/1 16:42

其实这道题的样例是有漏洞的,我自己用二分a了之后,回看判断条件时,发现我的写法里面存在漏洞,在二分的判断条件里,如果数列分不出和为mid!但是和均为小于mid的话,我的程序还是判断他满足条件?!就是说他根本不能找出最大和为mid的情况,还居然算满足,然后还a 了,有点离谱。```c #include #include using namespace std; long long a[100000]; long long n, k; bool judge(long long mid) { long long s = 0; long long num = 0; for (long long i = 0; i < n; i++) { s += a[i]; //if (mid == 6) cout << "s=" << s << " "; if (s>mid) { s = a[i]; num++; } else if (s == mid) { s = 0; num++; } } if (s == 0) num--; if (num + 1 > k) return 0; else return 1; } int main() { cin >> n >> k; for (long long i = 0; i < n; i++) { cin >> a[i]; } long long l, r; r = 0; long long ans; long long max=0; for (long long i = 0; i < n; i++) { r += a[i]; if (a[i] > max) max = a[i]; } l = max; long long mid; while (l<=r) { mid = (l + r) / 2; if (judge(mid)) { r = mid - 1; ans = mid; //cout << "ans=" << ans << ' '; } else l = mid + 1; //cout << "l=" << l << " r=" << r << endl; } cout << ans; }

2023/8/1 16:42
加载中...