土下座しながら探索中

主に競技プログラミング

UVa 11586 : Train Tracks

UVa演習 2014/6/8 (日) 問2

問題リンク : http://uva.onlinejudge.org/external/115/11586.html

問題概要:
MM,MF,FM,FFの4種類のピースがあり、FとM(またはその逆)をつなげることができる
ただし同じピースのFとMはつなげられない
与えられたピースを全てつかってループをつくることができるだろうか?

解法:
Fの数とMの数を数える
一緒でかつピースが2つ以上あるのであればループをつくれる
そうでない場合はつくれない

コード:

#include<bits/stdc++.h>

#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)

using namespace std;

const string YES = "LOOP", NO = "NO LOOP";

int main(){
  int T;
  cin >> T;
  cin.ignore();
  while( T-- ){
    int FM[2] = {};
    string line;
    getline(cin,line);
    stringstream ss;
    ss << line;
    while(!(ss>>line).fail()) {
      FM[line[0]=='M']++;
      FM[line[1]=='M']++;
    }
    if( FM[0] == FM[1] && FM[0] == 1 ) cout << NO << endl;
    else cout << ((FM[0]==FM[1])?YES:NO) << endl;
  }
  return 0;
}