公式

A - Decisive Battle 解説 by physics0523


AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題 A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。


問題文中にもある通り、 \(S\) の長さは奇数なので E, W\(S\) 中に同数含まれることはありえず、 E, W どちらかがもう一方より真に多いです。

どちらが多いかの判定法には色々ありますが、一例を示します。

  • 変数 \(h=0\) を用意する。
  • \(S\)\(1\) 文字ずつ調べ、出てきた文字が E なら \(h\)\(1\) 加算、 W なら \(h\) から \(1\) 減算するということを \(S\) の全ての文字について繰り返す。
  • 全文字を調べた後、 \(h>0\) なら E がより多く、そうでなければ W がより多い。

こうすることで、具体的にどちらがいくつかあるかの情報を捨てる代わりに、変数ひとつでどちらが多数派かを判定できます。

一連の実装は、例えば for 文と if 文を組み合わせることで実現可能です。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  string s;
  cin >> s;
  int h=0;
  for(auto &nx : s){
    if(nx=='E'){h++;}
    else{h--;}
  }
  if(h>0){cout << "East\n";}
  else{cout << "West\n";}
  return 0;
}

投稿日時:
最終更新: