SSL_2392 蚂蚁

题意

给出几只蚂蚁的移动方向和坐标,这些蚂蚁的移动距离都是一样的,如果蚂蚁之间在某个时刻在同一个坐标里面,它们就都会消失,求出剩下多少蚂蚁。

思路

题目中告诉了我们坐标在-1000~1000中,所以我们可以从2000来模拟每一步中蚂蚁都在哪个位置上,然后判断它们是否在一个位置上就好了。

代码

#include<cstdio>
#include<cstring>
using namespace std;
int n,ans,f;
double t=2005;
char c[51];
struct node{
    double x,y;
    char w;
}a[51];
int check(int x)//判断蚂蚁有没有消失
{
    if (a[x].w=='E'||a[x].w=='N'||a[x].w=='W'||a[x].w=='S') return 1;
    return 0;
}
int main()
{
    scanf("%d",&n);
    scanf("%s",c);
    for (int i=1;i<=n;i++)
        a[i].w=c[i-1];
    for (int i=1;i<=n;i++)
        scanf("%lf%lf",&a[i].x,&a[i].y);
    while (t-=0.5)
    {
        for (int i=1;i<=n;i++)
        {
            if (a[i].w=='N') {a[i].y+=0.5;continue;};
            if (a[i].w=='E') {a[i].x+=0.5;continue;};
            if (a[i].w=='S') {a[i].y-=0.5;continue;};
            if (a[i].w=='W') {a[i].x-=0.5;continue;};//模拟蚂蚁走动,这里是每次走0.5步的,比较容易处理它们在同一个位置上的情况
        }
        for (int i=1;i<n;i++)
        {
            f=0;
            for (int j=i+1;j<=n;j++)
                if (a[i].x==a[j].x&&a[i].y==a[j].y&&check(i)&&check(j)) a[j].w='\0',f=1;//判断是否在同一个位置上并把蚂蚁消掉
            if (f) a[i].w='\0';
        }
    }
    for (int i=1;i<=n;i++)
        ans+=check(i);//找出没消失的蚂蚁
    printf("%d",ans);
} 

猜你喜欢

转载自blog.csdn.net/ssl_hzb/article/details/79940680
今日推荐