侧边栏
首页代码

习题4-2 正方形(Squares, ACM/ICPC World Finals 1990, UVa201)

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt = 0,a,b;
char ch;
int main(){
    while(cin >> n >> m){
        int h[10][10] = {0},v[10][10] = {0};
        while(m--){
            cin >> ch >> a >> b;
            if(ch == 'H') h[a][b] = b + 1;
            else v[b][a] = b + 1;
        }
        int right[10][10] = {0},down[10][10] = {0},num[10] = {0};
        for(int i = 1;i <= n;i++){
            for(int j = n - 1;j >= 1;j--){
                right[i][j] = (h[i][j] == j + 1)? right[i][j + 1] + 1 : 0;
                down[j][i] = (v[j][i] == j + 1)? down[j + 1][i] + 1 : 0;
            }
        }
        for(int l = 1;l <= n;l ++)
        {
            for(int i = 1;i <= n - 1;i ++)
            {
                for(int j = 1;j <= n - 1;j ++)
                {
                    if(right[i][j] >= l && down[i][j] >= l && down[i][j + l] >= l && right[i + l][j] >= l)num[l]++,num[0] = 1;
                }
            }
        }
        if (cnt != 0) printf("\n**********************************\n\n"); // 以下为输出
        printf("Problem #%d\n\n", ++cnt);
        for (int i = 1; i <= n; i ++)
            if (num[i] != 0) printf("%d square (s) of size %d\n", num[i], i);
        if (num[0] == 0) printf("No completed squares can be found.\n");
    }
    return 0;
}

 

posted @ 2020-10-28 23:03  AlexStraightUp  阅读(42)  评论(0编辑  收藏  举报
页脚HTML代码