ACPC2013 Day3
Problem C: Problem C: Mysterious Operator
+演算子の規則は、
a1とa2をaの上位桁と下位桁としたとき、
次の規則を満たすものである。
a1 = x - y ・・・(1)
a2 = x + y ・・・(2)
(1)、(2)から
2x = a1 + a2
2y = a2 - a1
となるから、aの桁の分け方が決まり、xとyがある条件を満たせば、
そのaの桁の分け方でのxとyの組の個数は一意に定まる。
ここで、条件とは
・x >= 0
・y >= 0
・xは偶数
・yは偶数
・a1の桁数とa2の桁数の和はaの桁数と同じ
#include <iostream> #include <cmath> using namespace std; int main() { int a, cnt = 0, len; cin >> a; len = (int)log10(a) + 1; for (int i = 1; i <= len; i++) { int l = a / pow(10, i); int r = a - (l * pow(10, i)); if ((l + r) % 2 != 0 || (r - l) % 2 != 0) continue; if ((l + r) / 2 < 0 || (r - l) / 2 < 0) continue; if (l != 0 && r != 0 && (int)log10(l) + (int)log10(r) + 2 != len) continue; cnt++; } cout << cnt << endl; return 0; }