Codeforces 400(#234 Div2 only) B Inna and New Matrix of Candies

問題

n行m列のグリッドがあって、それぞれ'*', 'G', 'S'のどれか。
'*'は何もないセルで、'G'はロボット、'S'は飴のあるセル。
一行には必ずちょうど一つずつだけ、GとSが含まれている。


号令をかけると、まだゴールしてない全てのロボットが一斉に動き出して、
同時に右へ一歩ずつ進んでいく。
どれかのロボットが飴のあるセルにたどり着くか右端にたどり着いたら、そのロボットはゴール。
どれかのロボットがゴールすると、全てのロボットの動きが一旦止まる。


号令を何回かければ全てのロボットが飴のあるセルでゴールできるか。
飴のセルでゴールできないロボットがあるとき-1を出力せよ。
一旦ゴールしたロボットは次に号令をかけても動かない。

制約条件

n, m≦1000
一行にはちょうど一つずつのS, Gのセルがある。

方針

Sより右にGがある行があったら-1.
ないなら、SとGの距離が何通りあるかを数えればいい。

ソースコード

int h, w;

int main(){
	cin >> h >> w;
	
	vi v;
	
	rep(i, h){
		string a;
		cin >> a;
		int g, s;
		rep(j, w){
			if(a[j] == 'G') g = j;
			if(a[j] == 'S') s = j;
		}
		if(s < g){
			cout << -1 << endl;
			return 0;
		}
		v.pb(s - g);
	}
	
	sort(all(v));
	v.erase(unique(all(v)), v.end());
	
	cout << v.size() << endl;
}