uva 201 - Squares(自己的方法,同学有更好一点点的方法)

#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int h[20][20];
int v[20][20];
int size_[20];
int n,m;
int flag;

void judge(int x,int y)//这是关键部分的代码,用来判读那是否能构成square;
{
    int a1=n-x;
    int a2=n-y;
    int aa=min(a1,a2);
    for(int i=0; i<aa; i++)
    {
        if(h[x][y+i]&&v[x+i][y])
        {
            int j;
            for(j=0; j<=i; j++)
            {
                if(!(h[x+i+1][y+j])||!(v[x+j][y+i+1]))
                {
                    break;
                }
                if(j==i)
                {
                    flag=1;
                    size_[i]++;
                }
            }
        }
        else
            break;
    }
}

int main()
{
    int kase=0;
    while(scanf("%d",&n)!=EOF)
    {
        scanf("%d",&m);
        kase++;
        flag=0;
        memset(size_,0,sizeof(size_));
        memset(h,0,sizeof(h));
        memset(v,0,sizeof(v));
        int a1,a2;
        string s;
        for(int i=0; i<m; i++)
        {
            cin>>s>>a1>>a2;
            if(s=="H")
            {
                h[a1][a2]=1;
            }
            if(s=="V")
            {
                v[a2][a1]=1;
            }
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(h[i][j]&&v[i][j])
                {
                    judge(i,j);
                }
            }
        }
        if(kase!=1)
        printf("\n**********************************\n");
            printf("Problem #%d\n\n",kase);
        if(flag==1)
        {
            for(int i=0; i<20; i++)
            {
                if(size_[i]!=0)
                {
                    printf("%d square (s) of size %d\n",size_[i],i+1);
                }
            }
        }
        else
            printf("No completed squares can be found.\n");
    }
    return 0;
}

uva 201 - Squares(自己的方法,同学有更好一点点的方法)

时间: 2024-10-09 00:48:40

uva 201 - Squares(自己的方法,同学有更好一点点的方法)的相关文章

UVA - 201 Squares

Squares Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description A children's board game consists of a square array of dots that contains lines connecting some of the pairs of adjacent dots. One part of the

uva 201 Squares 暴力

暴力 把边的信息装到一个field数组里面 第一维存水平线 第二维存竖直线 多重循环 先从边长为1正方形开始检查 每次检查都重新扫一下它的外圈 注意竖直线的地方它先给列坐标再给行坐标 输出有些繁琐 注意输出空行还有星星 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath

UVA - 201 Squares(模拟 + 暴力)

题意:给出一些单位线段, 问各种大小的正方形有多少个.要控制输出格式. 解题思路:模拟存储横线和竖线,暴力枚举各种尺寸,O(N ^ 4),此题数据弱, 实际所用时间很短. 题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19423 Memory: 0 KB   Time: 16 MS Language: C++ 4.8.2   Result: Accepted #include<algorithm> #include

软件工程——理论、方法与实践 之 软件工程中的形式化方法

软件工程——理论.方法与实践 之 软件工程中的形式化方法 从广义上讲,形式化方法是指将离散数学的方法用于解决软件工程领域的问题,主要包括建立精确的数学模型以及对模型的分析活动.狭义的讲,形式化方法是运用形式化语言,进行形式化的规格描述.模型推理和验证的方法.形式化方法运用于软件工程实践当中主要目的是保证软件的正确性.软件开发实际上就是把现实世界的需求映射成软件额模型化过程.该过程包括:形式规约.形式证明我与检验.程序求精三方面的活动. 形式化规格说明是对软件系统对象,对象的操作方法,以及对象行为

【转】寻求一种更好的软件工程研究方法

Mary Shaw 寻求一种更好的软件工程研究方法 Mary Shaw School of Computer Science, Carnegie Mellon University 摘要关于对物理学,生物学和医学的研究过程,人们早已有了公开的精准的解释.即便是在形式上看似简单,但这个领域的内和外也算提供了有价值的“高水准研究”的指导.但是软件工程就不同了,人们至今尚未明确找到并解释如何研究以及用何种方法去进行研究??.(方法论也是顶层设计,只有找到了高屋建瓴的研究方法,才能推动这个行业的进步.本

LINQ to Entities 不识别方法“Int32 Parse(System.String)”,因此该方法无法转换为存储表达式。解决

  问题描述 最近在用LINQ to Entities,看看下面的代码 //获取分页数据 var admins = from aa in db.VAccountAdmins select aa; //处理过滤规则 if (null != filterRules) { JArray roles = (JArray) JsonConvert.DeserializeObject(filterRules); foreach (var fr in roles) { string field = fr["f

JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法

今天编程时,突然想起来在一些异步操作或Android原生库的时候,需要我们实现一些方法, 这些方法只需要我们具体实现,然后他们会在适当的时候,自动被调用! 例如AsyncTask,执行玩doInBackground()后会执行处理结果的postResult()方法,但我们并没有设置过他们的执行顺序. 以前只知道他们的运行原理,但不知道具体的实现方法,细想起来,这是一个相当不错的代码设计,所以决定研究一下. 因为一开始是通过实现方法来具体实现那些需要被执行的方法的,所以以为实现的方式是接口, 思索

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

C# DataTable.Load 和 DbDataAdapter.Fill 方法的比较。附取消限制的方法

两个方法都能获取数据库数据,但是有区别. DataTable.Load 方法获取数据,并且把数据库中的各种限制也加载到了DataTable中,比如能否为NULL,是否自增列 而DbDataAdapter.Fill 方法只是简单的把数据获取出来 如果必须要用Load方法获取数据,并且想要去除掉数据库中的限制,可以使用以下代码 (SqlConnection举例) SqlCommand com = new SqlCommand("select * from LoginUser", con);