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; } }