其他分享
首页 > 其他分享> > 2178 Round #4 E

2178 Round #4 E

作者:互联网

题目描述
FuQuan在动物园与对象一块秀恩爱的时候,动物园里突然起了骚乱。n只大象从笼子里跑了出来,并且疯狂地向着FuQuan所在的位置冲去。
整个动物园可以看作一个无限大的平面,FuQuan位于(0,0)处,他和大象总是处于平面上的整点处。每轮首先可以选择上下左右四个方向中的一个移动一单位长度。然后每个大象会移动至周围8个整点中距离FuQuan最近的那一个。如果在某个时间,FuQuan和大象处于同一整点,他就会被大象抓住,然后被逼着吃下二十斤的香蕉(不剥皮)。
如果FuQuan能够移动到无穷远处而不被大象逮着,那他就能幸免于难。众所周知FuQuan是极其聪明的人,他能否凭借自己的才智逃出去呢?

输入
第一行一个整数,为大象的数量。
接下来行,每行两个整数,表示在处有一只大象。

输出
如果FuQuan能够设法逃到无穷远处,那么输出ddd,否则输出banana。
样例输入
2
1 1
1 -1
样例输出
ddd
来源
南阳理工招新题

源代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n,i,j,c,f[4]={0},g[4]={0};//f为哪个象限有大象,需至少2个相对的象限(1、3;2、4)内有大象;
    scanf("%d",&n);//g为哪半条坐标轴有大象,至少2个 半轴 上有大象
    int x[n],y[n];
    for(i=0;i<n;i++)
    {
    scanf("%d%d",&x[i],&y[i]);
    if(x[i]>0&&y[i]>0)//1象限
    {
        f[0]=1;//有大象;下同。
    }else if(x[i]<0&&y[i]>0)//2象限
    {
        f[1]=1;
    }else if(x[i]<0&&y[i]<0)//3象限
    {
        f[2]=1;
    }else if(x[i]>0&&y[i]<0)//4象限
    {
        f[3]=1;
    }else if(x[i]>0&&y[i]==0)//x正半轴
    {
        g[0]=1;
    }else if(x[i]<0&&y[i]==0)//x负半轴
    {
        g[1]=1;
    }else if(x[i]==0&&y[i]>0)//y正半轴
    {
        g[2]=1;
    }else if(x[i]==0&&y[i]<0)//y负半轴
    {
        g[3]=1;
    }
    }
    if(f[0]+f[2]==2||f[1]+f[3]==2||g[0]+g[1]+g[2]+g[3]>1)
    {//两个相对的象限内均有大象;	  至少两条不同的半轴上有大象
        printf("banana");
    }else
    {
        printf("ddd");
    }
    return 0;
}

解题思路:
我通过找规律发现,如果大象(初始位置不在原点)能抓到FuQuan,则
1.至少有两只大象初始位置在相对的象限内(一只在第1象限另一只在第3象限,或一只在第2象限另一只在第4象限);
2.至少有两只大象在不同的半轴(x正半轴、x负半轴、y正半轴、y负半轴)上。
只需满足上述一种条件大象就能追上FuQuan。

标签:&&,大象,半轴,else,象限,FuQuan,2178,Round
来源: https://blog.csdn.net/qq_51690274/article/details/112161883