| jybox |
2012-02-15 02:50 |
祭祀广场求解...
题目:http://www.bianchengla.com/oj/1/practise/problem?id=1002
- #include <iostream>
using namespace std; int M,N;//题目中的M和N bool *map;//用于储存题目数据的二维数组 inline int max(int a,int b){//返回两个数里大的一个 return a>b?a:b; } bool checkArea(int x,int y,int a){ for(int m=x;m<x+a;m++)//检查矩形(M,N)中,左上角坐标为(x,y),边长为a的正方形中是否可以安放广场 for(int n=y;n<y+a;n++) if(map[m*M+n]) return false; return true; } int main(){ while(cin>>M>>N,M*N){ int A=1;//用于储存答案,先初始化为最小值1 map=new bool[M*N];//申请内存 for(int m=0;m<M;m++) for(int n=0;n<N;n++) cin>>map[m*M+n];//把题目读入 for(int m=0;m<M;m++)//对于map中的每列 for(int n=0;n<N;n++){//对于map中的每行 int a=0;//要尝试的正方形的变长 while(++a,m+a<=M && n+a<=N){//当这个正方形没有超出map的边框时,每次循环a自增1 if(checkArea(m,n,a))//检查这个区域中是否可以安放广场 A=max(A,a);//如果可以,更新A } } cout<<A<<endl;//输出答案 } }
|
|