一.问题描述
二.问题分析及思路
只要有可能碰撞就是unsafe,所以只要判断机器人可能存在的位置有没有重合就可以,用了数组保存当前单位可能出现的机器人数。对每个机器人更新数组的机器人可能存在的情况。题意的描述可能有点不够清晰,不过从样例可以看出来,不考虑左移右移避免碰撞,有任何碰撞的可能都是不安全的。
三.代码
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int t,pos[1000];
cin>>t;
string str;
bool flag;
for(int i=0;i<t;i++)
{
cin>>str;
flag=0;
memset(pos,0,str.length()*sizeof(int));
for(int j=0;j<str.length();j++)
{
if(str[j]>='0'&&str[j]<='9')
{
int temp=str[j]-'0';
while(temp)
{
if(j-temp>=0) pos[j-temp]+=1;
if(j+temp<str.length()) pos[j+temp]+=1;
temp--;
}
}
}
for(int j=0;j<str.length();j++)
{
if(pos[j]>1)
{
cout<<"unsafe"<<endl;
flag=1;
break;
}
}
if(flag==0) cout<<"safe"<<endl;
}
return 1;
}