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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章