hdu 4925 Apple Tree

题目链接: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;
}


hdu 4925 Apple Tree,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。