414 - 机加工曲面
时间限制:3.000 秒
成像设备提供两个加工表面的数字图像,这些表面最终将相互接触组装。这种最终接触的粗糙度是要估计的。
数字图像由两个字符“X”和“”(空格)组成。图像始终有 25 列,但行数 N 是可变的。第一列 (1) 将始终包含一个“X”,并且将成为左表面的一部分。左表面可以从第一列 (1) 向右延伸,作为连续的 X。
同样,第 25 列将始终包含一个“X”,并且将是右表面的一部分。右表面可以从第 25 列向左延伸为连续的 X。
表面的数字图像视图
左 右
XXXX XXXXX
XXX XXXXXXX
XXXXX XXXX
XX XXXXXX
. .
. .
. .
XXXX XXXXXXX XXXXXX
1 25
在图像的每一行中,可以有零个或多个空格字符将左表面与右表面分开。任何行中都不会有一个以上的空白区域。
对于给定的每个图像,您将确定左表面与右表面接触后将存在的总“空隙”。“空隙”是左右表面接触后保留在它们之间的空间总数。
通过严格水平地相互水平位移来使两个表面接触,直到某行左表面的最右边的“X”紧邻最左边的“X”的左侧
注意:原始图像可以显示已经接触的两个表面,在这种情况下,接触粗糙度估计中没有位移。
输入
输入由一系列数字图像组成。每个图像数据集具有以下格式:
第一行 -
单个无符号整数 N,其值大于零 (0) 且小于 13。的第一个数字
N将是一行中的第一个字符。
接下来的 N 行 -
X,然后是零个或多个空格,然后是一个或多个
X的。
数据结束由空数据集发出信号,该数据集在图像数据集的第一行上为零,并且没有其他数据。
输出
对于您作为数据集收到的每个图像,您需要回复总空隙(表面接触后剩余的空间计数)。对行上的单个整数使用默认输出。
样本输入(字符“B”便于阅读。实际的输入文件将使用 ASCII 空格字符,而不是“B”)。
4
XXXXBBBBBBBBBBBBBBBBXXXXX
XXXBBBBBBBBBBBBBBBXXXXXXX
XXXXXBBBBBBBBBBBBBBBBXXXX
XXBBBBBBBBBBBBBBBBBXXXXXX
2
XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
1
XXXXXXXXXBBBBBBBBBBBBBBXX
0
示例输出
4
0
0
学英语:
对于给定的每个图像,您将确定左表面与右表面接触后将存在的总“空隙”。
对所给的每幅图像,你要去查明当左表面接触到右表面后所存在的“空隙”总数。
完整代码:
/*0.009s*/
#include<cstdio>
#include<algorithm>
using namespace std;
int main(void)
{
int N, sum, minb, temp;
char c;
while (scanf("%d", &N), N)
{
getchar();
sum = 0;
minb = 10000;
for (int i = 0; i < N; i++)
{
temp = 0;
while (true)
{
c = getchar();
if (c == ' ')
{
sum++;
temp++;
}
else if (c == '\n')
{
minb = min(minb, temp);
break;
}
}
}
printf("%d\n", sum - minb * N);
}
return 0;
}