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