CF1301C Ayoub's function

题目描述

Ayoub 认为自己非常聪明,于是他设计了一个函数 $f(s)$,其中 $s$ 是一个二进制字符串(即仅包含符号 "0" 和 "1" 的字符串)。函数 $f(s)$ 表示字符串 $s$ 中包含至少一个 "1" 的子串的数量。 更正式地说,$f(s)$ 等于满足 $1 \leq l \leq r \leq |s|$(其中 $|s|$ 表示字符串 $s$ 的长度)且 $s_l, s_{l+1}, \ldots, s_r$ 至少有一个等于 "1" 的整数对 $(l, r)$ 的数量。 例如,如果 $s = $ "01010",那么 $f(s) = 12$,因为有 $12$ 个这样的 $(l, r)$ 对:$(1, 2), (1, 3), (1, 4), (1, 5), (2, 2), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 4), (4, 5)$。 Ayoub 还认为自己比 Mahmoud 更聪明,于是他给了 Mahmoud 两个整数 $n$ 和 $m$,并问了他这样一个问题:对于所有长度为 $n$ 且恰好包含 $m$ 个 "1" 的二进制字符串 $s$,求 $f(s)$ 的最大值。 Mahmoud 无法解决这个问题,于是向你寻求帮助。你能帮帮他吗?

输入格式

输入包含多组测试用例。第一行包含一个整数 $t$($1 \leq t \leq 10^5$)——表示测试用例的数量。 接下来每个测试用例一行,包含两个整数 $n$、$m$($1 \leq n \leq 10^9$,$0 \leq m \leq n$)——字符串的长度和其中 "1" 的个数。

输出格式

对于每个测试用例,输出一个整数,表示在所有长度为 $n$ 且恰好包含 $m$ 个 "1" 的字符串 $s$ 中,$f(s)$ 的最大值。

说明/提示

在第一个测试用例中,长度为 $3$ 且恰好包含 $1$ 个 "1" 的字符串只有 $3$ 个,分别为:$s_1 = $ "100",$s_2 = $ "010",$s_3 = $ "001"。它们的 $f$ 值分别为:$f(s_1) = 3, f(s_2) = 4, f(s_3) = 3$,因此最大值为 $4$,答案为 $4$。 在第二个测试用例中,最大值对应的字符串为 "101"。 在第三个测试用例中,最大值对应的字符串为 "111"。 在第四个测试用例中,长度为 $4$ 且恰好包含 $0$ 个 "1" 的字符串只有 "0000",此时 $f(s) = 0$,所以答案为 $0$。 在第五个测试用例中,最大值对应的字符串为 "01010",该字符串已在题目描述中作为示例给出。 由 ChatGPT 4.1 翻译