零件
Description
有一種工業零件,分成左右兩半,它們的形狀由’X’和空格表示的二維圖形表示,比如:左半的零件形狀如下:
XXXXX
XXX
XXXX
XXX
右半的零件的形狀如下
XXX
XXXX
XXXX
XXXXX
所有的左半邊的零件的左邊第一列都是X,所有右半的零件的右邊第一列都是X。
把這樣的左右兩個零件緊密地拼在一起,則可能存在空洞。零件本身也可能有空洞,但不會存在斷裂的零件,每個空洞為一個空格,要求你寫一個程序求出空洞的大小(空格的數目)。
輸入:
第一行是一個整數K,表示有多少個測試用例,以後每一個測試用例占2n+1行。每個測試用例的第一行為一個整數n,(1<=n<=20),從第2行到n+1行為左半零件的二維圖形,從第n+2行到2n+1行為右半零件。左半零件左對齊,最長一行不超過25列,
右半零件右對齊,最長一行不超過25列
輸出:
每行輸出一個測試用例的結果。
Sample Input
2
4
XXXXX
XXX
XXXX
XXX
XXX
XXXX
XXXX
XXXXX
2
XXXXX
X
XXXXX
XXX
Sample Output
1
6
#include<iostream>
using namespace std;
char a[21][25],b[21][25];
int len[42];
int main()
{
int k,n;
cin>>k;
while(k--)
{
cin>>n;
getchar();
int i,j,sum1=0,sum2=0;
for(i=0;i<n;i++) gets(a[i]);
for(i=0;i<n;i++) gets(b[i]);
for(i=0;i<n;i++)
{
sum1=0;sum2=0;
for(j=0;j<strlen(a[i]);j++)
{
if(a[i][j]=='X')
sum1++;
}
for(j=0;j<strlen(b[i]);j++)
{
if(b[i][j]=='X')
sum2++;
}
len[i]=sum1;
len[i+n]=sum2;
}
int max=0;
for(i=0;i<n;i++)
{
if(len[i]+len[i+n]>max)
max=len[i]+len[i+n];
}
int sum=0;
sum=n*max;
for(i=0;i<n;i++)
{
sum=sum-len[i]-len[i+n];
}
cout<<sum<<endl;
}
return 0;
}
摘自 我和我追逐的夢~~~