AOJ2524 Mysterious Operator
解法
問題の「x+y=a」という式は x-y と x+y を繋げた式。
a を string とみなして切り分ける場所を決める。切り分け方が正しいかどうかのチェックは以下で可能。
- 切り分けた結果、先頭に0を含まない数字になるかどうか
- 和より差の方が必ず小さい
- xとyが両方偶数(両方奇数)なら、xとyの和が偶数(同時に差も偶数)
- xとyが偶数と奇数のペアなら、xとyの和が奇数(同時に差も奇数)
あとは全ての切り分け方を試せば良い。
#include <iostream> #include <algorithm> #include <cmath> using namespace std; int toInt(string s) { return atoi(s.c_str()); } bool solve(string s, string t) { if(s[0] == '0') return 0; if(t[0] == '0') return 0; int a = toInt(s); int b = toInt(t); if(a > b) return 0; if((a + b) % 2 == 1) return 0; return 1; } int main() { string a; cin >> a; int const N = a.size(); int ans = 0; for(int i=0; i<N; i++) { ans += solve(a.substr(0, i), a.substr(i)); } cout << ans << endl; return 0; }