CF2106F.Goblin

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

TC 博士有一位新病人叫哥布林。他想测试哥布林的智力,但对标准测试感到厌倦了,于是决定增加难度。

首先,他创建一个长度为 nn 的二进制字符串∗^{\text{∗}} ss。然后,他创建 nn 个二进制字符串 a1,a2,…,ana_1, a_2, \ldots, a_n。已知 aia_i 是通过先复制 ss,再翻转第 ii 个字符(1\texttt{1} 变为 0\texttt{0},反之亦然)得到的。创建完所有 nn 个字符串后,他将它们排列成一个 n×nn \times n 的网格 gg,其中 gi,j=aijg_{i, j} = a_{i_j}。

一个大小为 kk 的集合 SS 被认为是好的,如果它满足以下条件:

  1. 对于所有 1≤i≤k1 \leq i \leq k,有 1≤xi,yi≤n1 \leq x_i, y_i \leq n;
  2. 对于所有 1≤i≤k1 \leq i \leq k,有 gxi,yi=0g_{x_i, y_i} = \texttt{0};
  3. 对于任意两个整数 ii 和 jj(1≤i,j≤k1 \leq i, j \leq k),坐标 (xi,yi)(x_i, y_i) 可以通过一系列相邻的(共享一条边的)值为 0\texttt{0} 的单元格到达 (xj,yj)(x_j, y_j)。

哥布林的任务是找出一个好的集合 SS 的最大可能大小。由于 TC 博士很慷慨,这次给了他两秒而不是一秒来找出答案。哥布林以不诚实著称,所以他请你帮他作弊。

∗^{\text{∗}} 二进制字符串是指仅由字符 1\texttt{1} 和 0\texttt{0} 组成的字符串。

输入格式

输入的第一行包含一个整数 tt(1≤t≤1031 \le t \le 10^3)——测试用例的数量。

每个测试用例的第一行包含一个整数 nn(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5)——二进制字符串 ss 的长度。

每个测试用例的第二行包含一个长度为 nn 的二进制字符串 ss。

保证所有测试用例的 nn 之和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,输出一个数字,表示网格中好的单元格集合的最大可能大小。

输入输出样例

  • 输入#1

    6
    3
    000
    4
    0010
    7
    1011001
    4
    0001
    2
    11
    1
    0

    输出#1

    3
    9
    10
    7
    1
    0

说明/提示

在第一个示例中,网格如下:

1 0 0
0 1 0
0 0 1

由单元格 (1,2)(1, 2) 和 (1,3)(1, 3) 组成的集合是好的。由单元格 (1,1)(1, 1) 和 (1,2)(1, 2) 组成的集合不是好的,因为单元格 (1,1)(1, 1) 的值不是 0\texttt{0}。由单元格 (1,2)(1, 2)、(1,3)(1, 3) 和 (2,3)(2, 3) 组成的集合是好的,且最大大小为 33。注意,由单元格 (2,1)(2, 1)、(3,1)(3, 1) 和 (3,2)(3, 2) 组成的集合也是好的,最大大小同样为 33。

在第二个示例中,网格如下:

1 0 1 0
0 1 1 0
0 0 0 0
0 0 1 1

好的集合的最大可能大小为 99。

翻译由 DeepSeek V3 完成

输入解题思路,AI测评打分。不知道怎么写?

首页