UVA

来源:互联网 发布:服装店记账软件 编辑:程序博客网 时间:2024/06/05 12:39

紫书第四章的,不难,当时懒没做,,,
题意:找正方形~,题目更定了规则,有个细节(仔细看)要看清,O(∩_∩)O
不是最好的代码,思路差不多就这样:
从头遍历一遍,每个点看作正方形的左上角点,当然 之前要有数组存边的
// 突然感觉我写代码怎么跟讲题似的,,不管了 就这样吧

#include<cstdio>const int maxn = 10 + 10;int h[maxn][maxn], v[maxn][maxn];int n, m, s[100], a, b, cnt;char c;void init(){    for(int i = 1; i <= n+5; ++i)        s[i] = 0;    for(int i = 1; i <= n; ++i)        for(int j = 1; j <= n; ++j)        {            h[i][j] = 0;            v[i][j] = 0;        }    for(int i = 0; i < m; ++i)    {        scanf("%c %d %d", &c, &a, &b);        if(c == 'H') h[a][b] = 1;        if(c == 'V') v[b][a] = 1;        getchar();    }}void solve(){    for(int i = 1; i <= n; ++i)    {        for(int j = 1; j <= n; ++j)        {            for(int k = 0; k < n; ++k)            {                if(i+k+1 > n || j+k+1 > n) break;                if(h[i][j+k] && v[i+k][j])                {                    int t = 0;                    for(int l = 0; l <= k; ++l)                    {                        if(!v[i+l][j+k+1] || !h[i+k+1][j+l])                            t = 1;                    //{ s[(k+1)]++; }                    }                    if(!t) s[k+1]++;                }                else break;            }        }    }    int f = 0;    if(cnt != 1) printf("\n**********************************\n\n");    printf("Problem #%d\n\n", cnt++);    for(int i = 1; i <= n; ++i)        if(s[i] ) { printf("%d square (s) of size %d\n", s[i], i); f = 1; }    if(!f) printf("No completed squares can be found.\n");}int main(){    cnt = 1;    while(scanf("%d%d", &n, &m) == 2 && n)    {        getchar();        init();        solve();    }    return 0;}
1 0
原创粉丝点击