답안 #101573

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
101573 2019-03-19T04:35:41 Z choikiwon Sailing Race (CEOI12_race) C++17
40 / 100
1833 ms 6272 KB
#include<bits/stdc++.h>
using namespace std;

const int MN = 555;

int N, T;
int adj[MN][MN];

int cc1[MN][MN][2];
int dp1(int u, int v, int t) {
    int &ret = cc1[u][v][t];
    if(ret != -1) return ret;

    ret = 0;
    if(t) {
        for(int i = (u + 1) % N; i != v; i = (i + 1) % N) {
            if(adj[u][i]) {
                ret = max(ret, dp1(u, i, 0) + 1);
                ret = max(ret, dp1(i, v, 1) + 1);
            }
        }
    }
    else {
        for(int i = (u + 1) % N; i != v; i = (i + 1) % N) {
            if(adj[v][i]) {
                ret = max(ret, dp1(u, i, 0) + 1);
                ret = max(ret, dp1(i, v, 1) + 1);
            }
        }
    }
    return ret;
}

int cc2[MN][MN][2];
int dp2(int u, int v, int t) {
    int &ret = cc2[u][v][t];
    if(ret != -1) return ret;
    if(u == v) return ret = 0;

    ret = -1e9;
    if(t) {
        for(int i = (u + 1) % N;; i = (i + 1) % N) {
            if(adj[u][i]) {
                ret = max(ret, dp2(i, v, 1) + 1);
            }
            if(i == v) break;
        }
    }
    else {
        for(int i = (u + N - 1) % N;; i = (i + N - 1) % N) {
            if(adj[u][i]) {
                ret = max(ret, dp2(i, v, 0) + 1);
            }
            if(i == v) break;
        }
    }
    return ret;
}

int main() {
    scanf("%d %d", &N, &T);

    for(int i = 0; i < N; i++) {
        while(1) {
            int t; scanf("%d", &t);
            if(!t) break;
            t--;

            adj[i][t] = 1;
        }
    }

    memset(cc1, -1, sizeof(cc1));
    memset(cc2, -1, sizeof(cc2));

    int ans = 0;
    int p = 0;
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++) if(i != j && adj[i][j]) {
            if(ans < dp1(i, j, 0) + 1) {
                ans = dp1(i, j, 0) + 1;
                p = i;
            }
            if(ans < dp1(j, i, 1) + 1) {
                ans = dp1(j, i, 1) + 1;
                p = i;
            }
        }
    }

    /*
    if(T) {
        for(int i = 0; i < N; i++) {
            vector<int> mx(N, -1e9);

            for(int j = (i + 1) % N; j != i; j = (j + 1) % N) {
                if(adj[i][j]) {
                    for(int k = (j + 1) % N; k != i; k = (k + 1) % N) {
                        if(ans < dp2(j, k, 1) + 2 + mx[k]) {
                            ans = dp2(j, k, 1) + 2 + mx[k];
                            p = i;
                        }
                    }
                }
                for(int k = (j + 1) % N; k != i; k = (k + 1) % N) {
                    if(adj[k][j]) {
                        mx[k] = max(mx[k], dp1(i, j, 0));
                    }
                }
            }

            mx = vector<int>(N, -1e9);
            for(int j = (i + N - 1) % N; j != i; j = (j + N - 1) % N) {
                if(adj[i][j]) {
                    for(int k = (j + N - 1) % N; k != i; k = (k + N - 1) % N) {
                        if(ans < dp2(j, k, 0) + 2 + mx[k]) {
                            ans = dp2(j, k, 0) + 2 + mx[k];
                            p = i;
                        }
                    }
                }
                for(int k = (j + N - 1) % N; k != i; k = (k + N - 1) % N) {
                    if(adj[k][j]) {
                        mx[k] = max(mx[k], dp1(j, i, 1));
                    }
                }
            }
        }

        for(int i = 0; i < N; i++) {
            vector<int> mx(N, -1e9);

            for(int j = (i + N - 1) % N; j != i; j = (j + N - 1) % N) {
                if(adj[j][i]) {
                    for(int k = (i + 1) % N; k != j; k = (k + 1) % N) {
                        if(ans < dp2(i, k, 1) + 2 + mx[k]) {
                            ans = dp2(i, k, 1) + 2 + mx[k];
                            p = j;
                        }
                    }
                }
                for(int k = (i + 1) % N; k != j; k = (k + 1) % N) {
                    if(adj[k][j]) {
                        mx[k] = max(mx[k], dp1(j, i, 1));
                    }
                }
            }

            mx = vector<int>(N, -1e9);
            for(int j = (i + 1) % N; j != i; j = (j + 1) % N) {
                if(adj[j][i]) {
                    for(int k = (i + N - 1) % N; k != j; k = (k + N - 1) % N) {
                        if(ans < dp2(i, k, 0) + 2 + mx[k]) {
                            ans = dp2(i, k, 0) + 2 + mx[k];
                            p = j;
                        }
                    }
                }
                for(int k = (i + N - 1) % N; k != j; k = (k + N - 1) % N) {
                    if(adj[k][j]) {
                        mx[k] = max(mx[k], dp1(i, j, 0));
                    }
                }
            }
        }
    }
    //*/

    printf("%d\n%d", ans, p + 1);
}

Compilation message

race.cpp: In function 'int main()':
race.cpp:61:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &N, &T);
     ~~~~~^~~~~~~~~~~~~~~~~
race.cpp:65:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             int t; scanf("%d", &t);
                    ~~~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 5120 KB Output is correct
2 Incorrect 6 ms 5120 KB Output isn't correct
3 Incorrect 7 ms 5248 KB Output isn't correct
4 Incorrect 8 ms 5248 KB Output isn't correct
5 Correct 8 ms 5248 KB Output is correct
6 Incorrect 10 ms 5248 KB Output isn't correct
7 Correct 12 ms 5248 KB Output is correct
8 Incorrect 11 ms 5248 KB Output isn't correct
9 Correct 19 ms 5376 KB Output is correct
10 Correct 25 ms 5376 KB Output is correct
11 Correct 22 ms 5376 KB Output is correct
12 Incorrect 96 ms 5624 KB Output isn't correct
13 Incorrect 265 ms 5760 KB Output isn't correct
14 Correct 575 ms 6052 KB Output is correct
15 Incorrect 1624 ms 6272 KB Output isn't correct
16 Incorrect 1757 ms 6272 KB Output isn't correct
17 Incorrect 1592 ms 6272 KB Output isn't correct
18 Correct 1032 ms 6272 KB Output is correct
19 Incorrect 1833 ms 6272 KB Output isn't correct
20 Incorrect 1809 ms 6272 KB Output isn't correct