UVa 414 - Machined Surfaces

时间:2022-05-18 23:46:42

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=355

题目:每行25个字符,左开始为X,右边也是X,中间为空格B;当所有行的左右X相互向内移动,直到有一行左右X相遇;这时所有行中间一共还有多少空格B。

思路:中间空格最少的行一定最先相遇,即X最多的行最先相遇;当X最多行相遇时,每行减少的空格数相同,则用X最多行的X数减去每一行的X数即为每一行剩余的空格数。

可以这样理解,设X最多行的X数为N,则空格数为25-N,那么当X最多行相遇时,每一行可以看做还剩N个字符。则此时每行的空格数为N-X的个数。

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; int main()
{
// freopen("input.txt","r",stdin);
string s;
int count,n,i,max,j;
int aa[];
while(cin>>n&&n)
{
getchar();
max=;
memset(aa,,sizeof(aa));
for(j=;j<n;j++)
{
count=;
getline(cin,s);
for(i=;i<s.length();i++)
if(s[i]=='X')
count++;
aa[j]=count;
if(max<count)
max=count;
}
count=;
for(i=;i<n;i++)
{
count+=max-aa[i];
}
cout<<count<<endl;
}
return ;
}