srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

yukicoder No.486 3 Straight Win(3連勝)

問題

問題概要

OXXXOXXのようなOとXからなる文字列が与えられる. OはEastの勝ちで, XはWestの勝ちを表している. 先に3連勝したほうを勝ちとする. どちらが勝つか. 勝者がない時はNAを出力.

解法

連続した3文字が同じ文字であるかを判定し, 先に同じ文字になった方を勝ちとすればいい. 最後まで見つからなければ, NAとする.

ミス

なし.

コード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vint;
typedef pair<int,int> pint;
typedef vector<pint> vpint;
#define rep(i,n) for(int i=0;i<(n);i++)
#define reps(i,f,n) for(int i=(f);i<(n);i++)
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
#define all(v) (v).begin(),(v).end()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define chmax(a, b) a = (((a)<(b)) ? (b) : (a))
#define chmin(a, b) a = (((a)>(b)) ? (b) : (a))
const int MOD = 1e9 + 7;
const int INF = 1e9;
const ll INFF = 1e18;

int main(void){
    string s; cin >> s;
    if(s.size() < 3){
        printf("NA\n");
        return 0;
    }
    rep(i, s.size() - 2){
        if(s[i] == 'O' && s[i + 1] == 'O' && s[i + 2] == 'O'){
            printf("East\n");
            return 0;
        }
        if(s[i] == 'X' && s[i + 1] == 'X' && s[i + 2] == 'X'){
            printf("West\n");
            return 0;
        }
    }
    printf("NA\n");
    return 0;
}