题目 ID:1401
思路
模拟
细节
我们发现相撞的时候要么是坐标为整数,要么就是小数点后面是 5 ,所以我们可以将坐标乘 2 。然后模拟 4000 秒即可。
代码
#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
struct node
{
int x,y;
bool f;
char d;
}a[55];
int n,ans,vis[55];
string s;
int main()
{
cin>>n;
ans=n;
for(int i=1;i<=n;++i) cin>>a[i].d;
for(int i=1;i<=n;++i) cin>>a[i].x>>a[i].y,a[i].x*=2,a[i].y*=2;
for(int i=1;i<=4000;++i)//模拟4000秒
{
memset(vis,0,sizeof(vis));
for(int j=1;j<=n;++j)
if(!a[j].f)//没有小时
{
int d;
if(a[j].d=='N') d=0;
if(a[j].d=='E') d=1;
if(a[j].d=='S') d=2;
if(a[j].d=='W') d=3;
//确定放向
a[j].x+=dx[d];
a[j].y+=dy[d];
//走一格
}
for(int j=1;j<=n;++j)
for(int k=j+1;k<=n;++k)//看看有没有相撞
if(!a[j].f&&!a[k].f&&a[j].x==a[k].x&&a[j].y==a[k].y) vis[j]=1,vis[k]=1;//相撞
for(int j=1;j<=n;++j)
if(vis[j]) a[j].f=1,ans--;//然他们消失
}
cout<<ans;
return 0;
}