第4回 ドワンゴからの挑戦状 予選 参加記

第4回 ドワンゴからの挑戦状 予選

A.

1/3文字目と、2/4文字が同じであればOK。 数値でやると、

if ((n / 1000) % 10 == (n / 10) % 10 && (n / 100) % 10 == n % 10) cout << "Yes" << endl;

という風に紛らわしくなった。

B.

すべての地点で2の数から5の数を引いた数を求めてその最大値を求める。 ただし、2の数と5の数が違ったり、どっかの地点でマイナスになったら駄目。

C.

デス数の並びに制限が無ければ普通のDPかパスカルの三角形で解けそう。 足す際に後ろの同じキル数の人たちの分を一緒に先に足しておけば良いらしい。自分以降に一ずつ加えるのと自分にn人分加えるのは確かに同じような気もする。 bsがデス数の合計、asa[i]が自分以降の同じキル数の人数とすると、

    REP(i,0,n) {
        REP(j,0,bs+1) {
            REP(k,0,j+1) {
                int prev = j - k * asa[i];
                if (prev < 0) continue;
                dpa[i+1][j] = (dpa[i+1][j] + dpa[i][prev]) % 1000000007;
            }
        }
    }