Problem 2189 : Addition Game

Problem E: 足し算ゲーム
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=2189

  • 問題概要

4桁までの数字の中で、隣り合う任意のふたつの数字を選んで足していく。
足せなくなった方が負け。二人でする。
どっちが勝つでしょう。

  • 解法

どの順で足してもおなじ。
10を越えたなら、計算に2回して、(a+b)%10 + 1になるだけ。
つまり、どこから足していっても、勝敗はきまっている。

  • ソース
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<sstream>
#include<cassert>
#include<queue>
#include<stack>

#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
#define ALL(C)     (C).begin(),(C).end()
#define pb         push_back
#define mp         make_pair
#define vint       vector<int>
#define FOR(it,o)  for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it)
#define lli	    long long int
#define ld	    long double

using namespace std;

main(){
  
  int n;
  cin >> n;
  rep(data, n){
    string s;
    cin >> s;
    stack<int> st;
    rep(i, s.length()){
      st.push(s[i] - '0');
    }
    bool win = true;
    while(st.size() != 1){
      win = !win;
      int tmp1, tmp2, sum;
      tmp1 = st.top();
      st.pop();
      tmp2 = st.top();
      st.pop();
      sum = tmp1 + tmp2;
      
      if(sum > 9){
	win = !win;
	sum = sum%10 + 1;
      }
      st.push(sum);
    }

    if(win)cout << "Audrey wins." << endl;
    else cout << "Fabre wins." << endl;
  }
}