合併後找出剩餘的space。
合併規則:左側最右與右側最左合併之。
那一定是左側 + 右側最多XX的那一個row,
會先併在一起。
也就是space最少的那個row。
所以找出space最小的row,
此row再跟其他row的space做相減加總後,
即為答案。
/* ACM 414 Machined Surfaces
* mythnc
* 2011/11/25 09:06:42
* run time: 0.004
*/
#include <stdio.h>
#define MAXCHAR 27 /* 25 + newline + '\0' */
#define MAXLINE 12
void input(char (*)[], int);
int count(char (*)[], int);
int main(void)
{
char str[MAXLINE][MAXCHAR];
int n, i;
while (scanf("%d", &n) && n != 0) {
getchar(); /* eat newline */
input(str, n);
printf("%d\n", count(str, n));
}
return 0;
}
/* input: receive input data */
void input(char (*s)[MAXCHAR], int n)
{
int i;
for (i = 0; i < n; i++)
fgets(s[i], MAXCHAR, stdin);
}
/* count: return the count of remain space numbers */
int count(char (*s)[MAXCHAR], int n)
{
int i, j, min, sum;
int countb[MAXLINE];
for (i = 0, min = 25; i < n; i++) {
/* calculate space number in each row */
for (j = countb[i] = 0; j < MAXCHAR; j++)
if (s[i][j] == ' ')
countb[i]++;
/* find the minimum space number */
if (min > countb[i])
min = countb[i];
}
for (i = sum = 0; i < n; i++)
sum += countb[i] - min;
return sum;
}
沒有留言:
張貼留言