#P866. 推箱子

推箱子

题目描述

小爱正在体验一款推箱子游戏。游戏每一关由长度为nn的字符_“\_”(空格)和@“@”(箱子)组成初始状态,让当前所有箱子集中到一块即可过关。 在一个动作中,如果目标移动的位置存在并且是空的,你可以将任何箱子向左移动一个位置或向右移动一个位置。当前所有箱子一排好,即任意两个箱子之间都不存在空格,方可进入下一关。 此款游戏共有tt关,确定通过每一关卡所需的最小移动次数。

输入格式

第一行:一个整数tt,表示tt个关卡。 接下来是2t2t行表示每一关初始情况。 一个整数nn, 表示当前可用位置情况 一个长度为nn的字符串,只包含“_”(空格)(空格)和“@”$(箱子)

输出格式

输出共tt行,每一行表示通过每一关卡所需的最小移动次数。

3
6
@@_@__
3
_@_
10
@_@___@_@@
1
0
9

样例解释 1

@@@___ (最右边箱子向左移动1个单位) @ (移动0次) 3 + 4 + 1 + 1 = 9 。左边第2个箱子向右移动3个单位、最左边箱子向右移动4个单位、 右边第2个箱子向左移动1个单位、最右边箱子向左移动1个单位

数据范围

  • 对于 30%30\%的数据,1t10,1ni1031 \leq t \leq 10, 1 \leq \sum{n_i} \leq 10^3
  • 对于 60%60\%的数据,1t103,1ni51051 \leq t \leq 10^3, 1 \leq \sum{n_i} \leq 5*10^5
  • 对于 100%100\%的数据,1t104,1ni1061 \leq t \leq 10^4, 1 \leq \sum{n_i} \leq 10^6