您的位置:首页 > 其它

POJ 2812 恼人的青蛙 解题报告

2009-02-04 22:48 519 查看
POJ 2812 恼人的青蛙 解题报告

编号:2812

 

考查点:枚举,优化判断条件

 

思路:算法是我看得书上的,要注意优化,搜索的时候有很多地方需要优化,例如两点是否是进入稻田的前两点,两点的下一点是否会出现在稻田里,还要注意很多地方,例如qsort和bsearch,否则很容易出现Time Limit Exceed

 

提交情况: 实现算法后,出现了很多此Time Limit Exceed,后来发现需要判断两点是否是进入稻田的前两点,修改代码后成功AC..

 

Source Code:

 

//POJ Grids 2812

#include <iostream>

using namespace std;

struct plant{

    int x;

    int y;

};

plant p[5001];

int h,l,n;

int compare(const void* e1,const void* e2)

{

    if (((*(plant*)e1).x - (*(plant*)e2).x)==0)

    {

        return (*(plant*)e1).y - (*(plant*)e2).y;

    }

    else

        return (*(plant*)e1).x - (*(plant*)e2).x;

}

int steps(int i,int j,int n)

{

    plant temp;

    int x,y;

    x = p[j].x - p[i].x;

    y = p[j].y - p[i].y;

    temp.x = p[j].x+x;

    temp.y = p[j].y+y;

    int count = 1;

    while (++count)

    {

        if (!bsearch(&temp,p,n,sizeof(plant),compare))

        {

            if (temp.x>h||(temp.y<1||temp.y>l))

            {

                return count;

            }

            return -1;

        }

        temp.x += x;

        temp.y += y;

    }

}

int main()

{

    scanf("%d %d",&h,&l);

    scanf("%d",&n);

    for (int i=0;i<n;i++)

    {

        scanf("%d %d",&p[i].x,&p[i].y);

    }

    qsort(p,n,sizeof(plant),compare);

    int max = 2;

    for (int i=0;i<n-2;i++)

    {

        for (int j=i+1;j<n-1;j++)

        {

            //optimize

            int x,y;

            x = p[j].x - p[i].x;

            y = p[j].y - p[i].y;

            if (p[i].x-x>=1&&(p[i].y-y<=l&&p[i].y-y>=1))

                continue;

            if (p[i].x+max*x>h)

                break;

            if (p[i].y+max*y>l||p[i].y+max*y<1)

                continue;

            int temp = steps(i,j,n);

            if (temp>max)

            {

                max = temp;

            }

        }

    }

    if (max>=3)

        cout<<max<<endl;

    else

        cout<<"0"<<endl;

    return 0;

}

 

总结:要先读代码,出现了很多次把temp.x写成了temp.y的低级错误。寄希望于visual assist只会犯下更隐蔽的错误.。

 

 

 

                                                      
By   Ns517

                                                     
Time 09.02.04
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: