题解:CF803D Magazine Ad

· · 题解

题意

这道题是在满足行数限制的条件下,找到广告所需的最小宽度。确定每行可容纳的最大字符数,通过 二分查找 来优化这个过程。

思路

int main() { int k; cin >> k; cin.ignore(); string ad; getline(cin, ad);

int LL = 0;

a[LL++] = -1;  // 起始位置

for (int i = 0; i < ad.length(); ++i) {
    if (ad[i] == ' ' || ad[i] == '-') {
        a[LL++] = i;
    }
}
a[LL++] = ad.length() - 1;  // 结束位置

int l = 1;
int r = ad.length();
int ans = ad.length();

while (l <= r) {
    int mid = (l + r) / 2;

    if (fun(LL, mid, k)) {
        ans = mid;
        r = mid - 1;
    } else {
        l = mid + 1;
    }
}

cout << ans << endl;
return 0;

}