#CF1945C. 左右房屋
左右房屋
C. 左右房屋
每个测试用例时间限制: 秒 每个测试用例内存限制: 兆字节
在 Letovo 村有 栋房屋。村民们打算修建一条大路,将村庄分成左右两侧。 每位居民都希望住在街道的左侧或右侧,用序列 表示:
- 表示第 栋房屋的居民希望住在街道左侧;
- 表示希望住在街道右侧。
道路会建在两栋房屋之间。道路左边的房屋划为左侧,右边的房屋划为右侧。 更形式化地说:设道路建在房屋 和 之间,则:
- 位置在 到 的房屋在街道左侧;
- 位置在 到 的房屋在街道右侧。
道路也可以建在第一栋房屋之前(此时全村都在右侧)或最后一栋房屋之后(全村都在左侧),对应 与 。
为了规划公平,决定按照如下要求修路: 道路两侧中,每一侧至少有一半居民对自己所在的一侧满意。 形式化地说:某一侧有 位居民,则至少要有 位居民希望住在这一侧( 表示对实数 向上取整)。
具体要求:
- 道路左侧共有 栋房屋,其中 的数量至少为 ;
- 道路右侧共有 栋房屋,其中 的数量至少为 。
请你确定,应该在第 栋房屋之后修建道路,满足上述条件,并且尽可能靠近村庄正中间。 形式化地说:在所有合法位置 中,最小化 。 如果有多个 同时取到最小距离,输出较小的那个。
输入格式
输入包含多组测试用例。 第一行一个整数 ()—— 测试用例数量。
每组测试用例:
- 第一行一个整数 ();
- 第二行一个长度为 、仅由字符 和 构成的字符串 。
保证所有测试用例的 之和不超过 。
输出格式
对每组测试用例,输出一个整数 —— 表示在第 栋房屋之后修路。 (若修在第一栋房屋前,输出 。) 题目保证解一定存在。
样例输入
7
3
101
6
010111
6
011001
3
000
3
110
3
001
4
1100
样例输出
2
3
2
3
0
1
0
样例说明
以第一个样例为例:
如果在第 栋房屋后修路,左侧有 栋房屋 ,居民希望住在右侧。左侧满意人数为 ,不满足至少 人的要求,因此不合法。
如果在第 栋房屋后修路:
- 左侧 人(),满意人数为 ,满足 ;
- 右侧 人(),满意人数为 ,满足 。
因此该位置合法,且是最优解。