题目链接:http://codeforces.com/problemset/problem/400/B
题目大意:n*m的方格,每行中仅有一个S和G,每一步可以使所有G向右移,直到某个G已到了最后一列或某个G已到了S。求所有G到S需要的最少的步数。
题目分析:统计S-G差出现的个数,可以用set保存。
代码参考:
#include<set>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 2000;
char s[N];
set<int>si;
int main()
{
int n, m, i, j, a, b;
while(cin>>n>>m)
{
si.clear();
bool f = true;
for(i=0; i<n; ++i)
{
scanf("%s",s);
int a, b;
for(j=0; j<m; ++j)
{
if(s[j] == 'G') a = j;
else if(s[j] == 'S') b = j;
}
if(b-a<0) f = false;
else si.insert(b-a-1);
}
if(f) cout<<si.size()<<endl;
else cout<<"-1"<<endl;
}
return 0;
}