hdu 4925 Apple Tree

来源:互联网 发布:琉璃神社最新域名网址 编辑:程序博客网 时间:2024/05/08 21:46

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925

思路:直接计算坐标和,如果为奇数就种树,但要注意行或列为1的情况。

写啦两种代码:一种直接判断计算的,另一种优化计算的

code1:

#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int main(){    int T;    scanf("%d",&T);    while(T--)    {        int n,m,i,j;        while(scanf("%d%d",&n,&m)==2)        {            int sum=0;            if(n==1&&m==1)   //特殊情况            {                printf("1\n");            }            else if(n==1||m==1)   //特殊情况            {                if(m==1)                {                    int t=n;                    n=m;                    m=t;                }                if(m%2==0)                {                    sum=sum+(m-1)*2;                }                else                {                    sum+=(m/2*4);                }                printf("%d\n",sum);            }            else            {                for(i=1;i<=n;i++)                {                    for(j=1;j<=m;j++)                    {                        if((i+j)%2==1)                        {                            if(i==1||i==n)                            {                                if(j==1||j==m)                                {                                    sum+=4;                                }                                else                                {                                    sum+=8;                                }                            }                            else if(j==1||j==m)                            {                                if(i==1||i==n)                                    sum+=4;                                else                                {                                   sum+=8;                                }                            }                            else //if(i!=1&&i!=n&&j!=1&&j!=m)                            {                                sum+=16;                            }                        }                    }                }                printf("%d\n",sum);            }        }    }    return 0;}

code2:

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;int a[110][110];int main(){    int T,n,m;    scanf("%d",&T);    while(T--)    {        int n,m,sum=0;        scanf("%d%d",&n,&m);        if(n==1&&m==1)        {            printf("1\n");        }        else if(n==1||m==1)        {            if(m==1)            {                int t=n;                n=m;                m=t;            }            if(m%2==0)            {                sum=sum+(m-1)*2;            }            else            {                sum+=(m/2*4);            }            printf("%d\n",sum);        }        else        {            if(n%2==1)            {                int t=n;                n=m;                m=t;            }            if(m%2==0)            {                sum+=((m-1)*8);                //printf("BB %d\n",sum);                sum+=((m/2-1)*(n-2)*16+(n-2)*8);                //printf("BB %d\n",sum);            }            else            {                if(n%2==0)                {                    sum+=((m-1)*8);                    sum+=((n-2)/2*(m-2)*16);                    sum+=((n-2)*8);                }                else                {                    sum+=(m/2*16);                    //printf("AA %d\n",sum);                    sum+=((n-2)/2*(m-2)*16);                    //printf("BB %d\n",sum);                    sum+=((m-2)/2*16);                    //printf("CC %d\n",sum);                    sum+=((n-1)*8);                    //printf("DD %d\n",sum);                }            }            printf("%d\n",sum);        }    }    return 0;}


0 0
原创粉丝点击