UVA 201 Squares(枚举)

题目链接

题意

给出一个平面,询问可以构成多少个正方形

解决

  1. 注意V的i,j是反的
  2. 题意要求长度从小到大输出,我们就枚举长度
  3. 枚举长度之后枚举左上角
  4. 判断正方形是否存在
  5. 注意输出格式
#include<bits/stdc++.h>
using namespace std;

int H[10][10],V[10][10];
bool judge(int i, int j, int len)   //判断以i,j为左上角,长度为l的正方形是否存在
{
    for(int k=0;k<len;k++){
        if(H[i][j+k]==0||H[i+len][j+k]==0) return false;
        if(V[i+k][j]==0||V[i+k][j+len]==0) return false;
    }
    return true;
}

int main()
{
    int n,m,t=1;
    char ch;
    while(~scanf("%d%d",&n,&m))
    {
        if(t!=1)  printf("\n**********************************\n\n");
        printf("Problem #%d\n\n",t++);

        int a,b;
        memset(H,0,sizeof(H));
        memset(V,0,sizeof(V));

        for(int i=0 ; i<m; i++)
        {
            getchar();
            scanf("%c",&ch);
            scanf("%d%d",&a,&b);
            if(ch=='H') H[a][b] = 1;
            if(ch=='V') V[b][a] = 1;
        }

        int sum=0;
        for(int l=1;l<10;l++)   //从小到大枚举长度
        {
            int ans = 0;
            for(int i=1;i<10;i++)
            {
                for(int j=1;j<10;j++)   //枚举左上角的点
                {
                    if(judge(i,j,l)) ans++;
                }
            }
            if(ans) printf("%d square (s) of size %d\n",ans,l);
            sum+=ans;
        }
        if(!sum) printf("No completed squares can be found.\n");
    }
}
发布了54 篇原创文章 · 获赞 8 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章