はまやんはまやんはまやん

hamayanhamayan's blog

鰻と忖度 [技術室奥プログラミングコンテスト #3 B]

https://beta.atcoder.jp/contests/tkppc3/tasks/tkppc3_b

解法

https://beta.atcoder.jp/contests/tkppc3/submissions/2840738

6の倍数であることは、2の倍数かつ3の倍数であることを使えばいい。
よって、2,3,11の倍数であることを判別できれば良い。
 
2の倍数判定(is2関数)
最下位数が0,2,4,6,8であればいい。
最下位数が2の倍数であることを判定しよう。
 
3の倍数判定(is3関数)
各位の和が3の倍数であれば、その数は3の倍数である。
 
11の倍数判定(is11関数)
ぐぐるこのサイトが見つかる。
このサイトによると偶数桁と奇数桁でそれぞれ各位の和を取り、その差が11の倍数であればいい。
これを実装する。

string N;
//---------------------------------------------------------------------------------------------------
int is2() {
    char c = N[N.length() - 1];
    if ((c - '0') % 2 == 0) return 1;
    return 0;
}
//---------------------------------------------------------------------------------------------------
int is3() {
    int sm = 0;
    fore(c, N) sm += c - '0';
    if (sm % 3 == 0) return 1;
    return 0;
}
//---------------------------------------------------------------------------------------------------
int is11() {
    int sm[2] = { 0, 0 };
    rep(i, 0, N.length()) sm[i % 2] += N[i] - '0';
    int d = abs(sm[0] - sm[1]);
    if (d % 11 == 0) return 1;
    return 0;
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
 
    if (is2() and is3()) cout << "yES" << endl;
    else cout << "nO" << endl;
 
    if (is11()) cout << "yES" << endl;
    else cout << "nO" << endl;
}