Code Thanks Festival B

12月14日(日)、Code Thanks Festival B日程に参加してきました。

勉強会と被ってた & テスト期間が先週まで続いていた & レポートがやばかったのでほとんど準備らしい準備はできずに参加しました。

問題

A問題

int main() {
    ios_base::sync_with_stdio(0);
    int A, B;
    cin >> A >> B;
    cout << max(A, B) << endl;
}

B問題

int main() {
    ios_base::sync_with_stdio(0);

    int A, B, C;
    cin >> A >> B >> C;
    int D = max(A+B, A*B);
    cout << max(D*C, D+C) << endl;
}

C問題

int main() {
    ios_base::sync_with_stdio(0);

    int N, ans = 0;
    cin >> N;
    vector<int> v(N);
    for(int i = 0; i < N; i++) {
        cin >> v[i];
    }
    int a;
    for(int i = 0; i < N; i++) {
        cin >> a;
        if(v[i] / 2 < a) {
            ans++;
        }
    }

    cout << ans << endl;
}

D問題

int d[1001];

int main() {
    ios_base::sync_with_stdio(0);
    
    int N, T, A;
    cin >> N >> T;
    int ans = 0;
    for(int i = 0; i < N; i++) {
        cin >> A;
        for(int j = 1; ; j++) {
            if(j * A > T) break;
            d[j*A]++;
            ans = max(ans, d[j*A]);
        }
    }
    cout << ans << endl;
}

E問題

typedef pair<int,int> P;

int R, C, N;
int field[50][50];
bool ok[50][50];
int x[4] = {0, 1, 0 , -1};
int y[4] = {1, 0 , -1, 0};

int main() {
    ios_base::sync_with_stdio(0);

    P s, g;
    cin >> R >> C;
    cin >> s.first >> s.second;
    cin >> g.first >> g.second;
    s.first--, s.second--;
    g.first--,g.second--;

    cin >> N;

    memset(field, -1, sizeof field);
    int r, c, h, w;
    for(int i = 0; i < N; i++) {
        cin >> r >> c >> h >> w;
        r--, c--;
        for(int y = 0; y < h; y++) {
            for(int x = 0; x < w; x++) {
                ok[r+y][c+x] = true;
            }
        }
    }
    

    for(int i = 0; i < R; i++) {
        for(int j = 0; j < C; j++) {
            field[i][j] = -1;
        }
    }


    queue<P> que;
    if(ok[s.first][s.second]) {
        field[s.first][s.second] = 0;
        que.push(s);
    }
    for(; !que.empty(); que.pop()) {
        P p = que.front();

        if(p.first == g.first && p.second == g.second) {
            cout << "YES" << endl;
            return 0;
        }

        for(int i = 0; i < 4; i++) {
            int ny = p.first + y[i];
            int nx = p.second + x[i];

            if(0 <= nx && nx < C && 0 <= ny && ny < R && ok[ny][nx] && field[ny][nx] < 0) {
                field[ny][nx] = field[p.first][p.second] + 1;
                que.push(make_pair(ny,nx));
            }
        }
    }


    cout << "NO" << endl;

}

F問題

const long long MOD = 1000000007;
long long dp[1001];

int main() {
    ios_base::sync_with_stdio(0);

    string X, S, T;
    cin >> X >> S >> T;

    int ans = 0;

    dp[0] =1;

    for(int i = 0; i < X.size(); i++) {
        bool f = true;
        for(int j = 0; j < S.size(); j++) {
            if(X[i+j]!=S[j]) {
                f = false;
                break;
            }
        }
        if(f) {
            (dp[i+S.size()] += dp[i]) %= MOD;
        }
        f = true;
        for(int k = 0; k < T.size(); k++) {
            if(X[i+k]!=T[k]) {
                f = false;
                break;
            }
        }
        if(f) {
            (dp[i+T.size()] += dp[i]) %= MOD;
        }
    }

    cout << dp[X.size()] << endl;
}

G問題

int dp[501][501];

bool solve(int n, int p) {
    if(dp[n][p] != -1) return dp[n][p];
    if(n <= p) return dp[n][p] = true;
    bool res = false;
    for(int i = 1; i <= min(n, p); i++) {
        if(!solve(n-i, i+1)) {
            res = true;
            break;
        }
    }

    return dp[n][p] = res;
}

int main() {
    int N, P;
    cin >> N >> P;
    for(int i = 0; i <= N; i++) for(int j = 0; j <= N; j++) dp[i][j]=-1;
    cout << (solve(N, P) ? "first" : "second") << endl;
}

H問題

解いてない

所感

  • 結果的にamazonカード9000円分と焼肉権を頂いたので行って良かったなと思います。

f:id:t-tatsukawa:20141225182728j:plain

  • DP比較的得意な方とか思っていたけど2人で勝敗を決める系のDP書いたことが無くて撃沈したのが辛かった。
  • 叙々苑の焼き肉弁当美味しかったです。
  • 結構Twitterのフォロワーが沢山いて焦った。
  • 懇親会は完全に音ゲーマーのためのイベントと化していた。あの雰囲気には入れないなぁ。
  • スタッフの皆さんありがとうございました。