페이지

10563번: Number Game



#include<cstdio>
#include<cstring>
int t, n, dp[100][100][100], a[100], l, r, lc, rc, g;
int f(int s, int e, int c) {
    if (c < 0 || s > g || e < g || s == e) return 1;
    int &ret = dp[s][e][c];
    if (!~ret) ret = !f(s + 1, e, s == l ? lc + c : c) | !f(s, e - 1, e == r ? rc + c : c) | !f(s, e, c - 1);
    return ret;
}
int main() {
    for (scanf("%d", &t); t--;) {
        scanf("%d", &n);
        lc = 0; rc = 0;
        memset(dp, -1, sizeof(dp));
        for (int i = 0; i < n; i++) {
            scanf("%d", a + i);
            if (a[i] == 1) l = r = g = i;
        }
        for (; l && a[l - 1] > a[l];) l--;
        for (; r < n - 1 && a[r] < a[r + 1];) r++;
        int i = l, j = r;
        for (; i && a[i - 1] < a[i]; i--) lc++;
        for (; j < n - 1 && a[j] > a[j + 1]; j++) rc++;
        puts(f(l, r, i + n - 1 - j) ? "Alice" : "Bob");
    }
    return 0;
}

댓글 없음 :

댓글 쓰기