diff --git a/TangDou/Topic/PrefixAndSuffix/P1083.cpp b/TangDou/Topic/PrefixAndSuffix/P1083.cpp index e260395..b822180 100644 --- a/TangDou/Topic/PrefixAndSuffix/P1083.cpp +++ b/TangDou/Topic/PrefixAndSuffix/P1083.cpp @@ -7,7 +7,7 @@ int n, m; // 天数和订单的数量 int r[N]; // 第i天学校有r[i]个教室可借用 int d[N], s[N], t[N]; // 借的教室数目、从第s天借到t天 int cf[N]; // 差分数组 -bool judge(int x) { // 判断能不能通过x个人 +bool check(int x) { // 判断能不能通过x个人 memset(cf, 0, sizeof(cf)); // 每次判断都要先初始化差分数组 int sum = 0; // 记录需要借的教室数 for (int i = 1; i <= x; i++) { @@ -25,18 +25,17 @@ signed main() { cin >> n >> m; for (int i = 1; i <= n; i++) cin >> r[i]; for (int i = 1; i <= m; i++) cin >> d[i] >> s[i] >> t[i]; - if (judge(m)) { // 如果全部满足 - cout << '0'; // 输出0 - return 0; // 直接结束程序 + if (check(m)) { // 如果全部满足 + cout << 0 << endl; // 输出0 + exit(0); // 直接结束程序 } - int l = 1; - int r = m; // 二分左右区间 + int l = 1, r = m; // 二分左右区间 while (l < r) { - int mid = (l + r) / 2; - if (judge(mid) == true) // 如果可行 - l = mid + 1; // 增多满足人数 - else // 否则 - r = mid; // 减少满足人数 + int mid = l + r >> 1; + if (check(mid)) // 如果可行 + l = mid + 1; // 增多满足人数 + else // 否则 + r = mid; // 减少满足人数 } cout << "-1" << endl << l; // 输出-1和需要修改的人