zoukankan      html  css  js  c++  java
  • uva201

    题目意思就是找正方形,思路是用两个矩阵存横向和纵向的线,遍历每个顶点,并且列举每个顶点存在的正方形。

    #include <iostream>
    #include<cstring>
    using namespace std;
    #define maxn 12
    int h[maxn][maxn], v[maxn][maxn], sq[maxn], m, n;
    
    void input();
    int squares();
    int check(int x, int y, int k);
    
    int main() {
        int kase = 0;
        while (cin >> n) {
            cin >> m;
            input();
            int res = squares();
            if(kase)cout<<"
    **********************************
    
    ";
            cout << "Problem #" << ++kase << endl<<endl;
            if (res) {
                for (int i = 1; i <= n; i++) {
                    if (sq[i]) {
                        cout << sq[i] << " square (s) of size " << i << endl;
                    }
                }
            } else {
                cout << "No completed squares can be found." << endl;
            }
        }
        return 0;
    }
    
    void input() {
        char cmd[5];
        int a, b;
        memset(h, 0, sizeof(h));
        memset(v, 0, sizeof(v));
        memset(sq, 0, sizeof(sq));
        for (int i = 0; i < m; i++) {
            cin >> cmd >> a >> b;
            if (cmd[0] == 'H')
                h[a][b + 1] = 1;
            else
                v[b + 1][a] = 1;
        }
    }
    
    int squares() {
        int flag = 0, i, j, k;
        for (i = 1; i <= n - 1; i++)
            for (j = 1; j <= n - 1; j++)
                for (k = 1; k <= n - 1; k++) {
                    if ((i + k <= n) && (j + k <= n)) {
                        if (check(i, j, k)) {
                            sq[k]++;
                            flag++;
                        }
                    }
                }
        return flag;
    }
    
    int check(int x, int y, int k) {
        int res = 1;
        for (int i = y + 1; i <= y + k; i++)
            if ((h[x][i] == 0) || (h[x + k][i] == 0))
                res = 0;
        for (int i = x + 1; i <= x + k; i++)
            if ((v[i][y] == 0) || (v[i][y + k] == 0))
                res = 0;
        return res;
    }
  • 相关阅读:
    常用Linux命令
    SQL必知必会-笔记
    【ubuntu】install openbox+tint2+bmenu on ubuntu12.04.4
    【ruby】安装Ruby
    【ruby】快速安装gems的方法
    【sinatra】设置默认的端口
    【sinatra】修改默认ip绑定
    【sinatra】结合Padrino framework
    【sinatra】安装测试
    【rails3教材】博客构建过程2
  • 原文地址:https://www.cnblogs.com/ArvinShaffer/p/7839733.html
Copyright © 2011-2022 走看看