刚开始的时候,题意理解错了。然后在那不停地纠结,网上看别人的博客,没有看到把题意说的很清楚的,还有一个翻译的特别好笑。
在这里把题意仔细说一下:
在一个n行m列的矩阵里,每行都有一个矮人雕像和一颗糖果,游戏目的是让每一个矮人雕像都得到糖果。现在,让每一行的矮人雕像同时向右走,当有矮人雕像遇到糖果就停下。
这称为一个move,注意,注意,一个move可以走多步啊。。(ps:题目中的走到最右端这个条件,完全可以去掉QAQ)
这样这个题就很清楚了
1:如果存在一行有矮人雕像在糖果的右边,直接输出-1
2:每一行的矮人雕像到糖果都有一个距离,把这个距离存到数组里,也就n个,然后找出数组里有多少个不一样的值就OK了。
老外真会玩,这一样一个题,本来只要会C语言就行了,非要搞来搞去,强行秀英语,也是醉了。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
char a[1010][1010];
int dis[1010];//用来存距离的
int main()
{
int n,m,count,flag;
while(cin>>n>>m)
{
int temp1,temp2;
for(int i=0;i<=n-1;i++)
for(int j=0;j<=m-1;j++)
cin>>a[i][j];
count=0;
flag=1;//标志量,随便搞啦
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=m-1;j++)
{
if(a[i][j]=='G')
temp1=j;
if(a[i][j]=='S')
temp2=j;
}
if(temp2-temp1<0)
{
flag=0;
break;
}
else
{
dis[count]=temp2-temp1;
count++;
}
}
if(flag==0)
{
cout<<-1<<endl;
continue;
}
sort(dis,dis+count);
int res=1;
for(int i=1;i<=count-1;i++)//排个序,再记数
{
if(dis[i]!=dis[i-1])
res++;
}
cout<<res<<endl;
}
return 0;
}