首页 > 代码库 > 天大 ACM 1090. City hall

天大 ACM 1090. City hall

此题的关键就在你是如何选择来计算需要加进去的砖块,是从小的height开始还是从大的height开始。本题是新建一个数组用来存储从最大的(最大的height)砖头开始的砖头数。代码中“for(int k=m;k>=1;k--)”

然后通过下面中的  str[iii][j]=‘1‘; 将其补上;进而再计算次最大的height的砖头数。以此类推,得出结论。

#include<iostream>#include<cstring>using namespace std;const int M =200;int main(){    int m,n;    char str[M][M];    int pp[M];    cin>>m>>n;    getchar();    int i,j,k,ii,c;    for(i=0;i<m;i++)       gets(str[i]);    for(k=m;k>=1;k--)    {        int count =0;        for(j=0;j<n;j++)        {            for(i=0;i<m;i++)            {                if(str[i][j]==0)                {                    c=0;                  for(ii=i;ii<m;ii++)                  {                    if(str[ii][j]==0)                       c++;                    else                    {                        ii--;                        break;                    }                   }                  if(c==k)                  {                     count++;                     for(int iii=i;iii<=ii;iii++)                       str[iii][j]=1;                  }                  i=ii;             }                }        }        pp[k-1]=count;            }    for(i=0;i<m;i++)      if(pp[i]!=0)       cout<<i+1<<" "<<pp[i]<<endl;    return 0;}

 

天大 ACM 1090. City hall