답안 #986776

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
986776 2024-05-21T08:08:45 Z vjudge1 Sailing Race (CEOI12_race) C++17
55 / 100
190 ms 10096 KB
#include<bits/stdc++.h>
using namespace std;   
int dp1[512][1024],dp2[512][1024];
pair<int,int>ans;
vector<int>adj[512],rev[512];
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n,t;
    cin>>n>>t;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        while(x){
            adj[i].push_back(x);
            rev[x].push_back(i);
            cin>>x;
        }
    }
    for(int d=2;d<=n;d++){
        for(int i=1,j;i<=n;i++){
            j=i+d;
            for(auto x:adj[(i-1)%n+1]) {
                if(i>x)x+=n; if(j<=x)continue;
                dp1[i][j]=max(dp1[i][j],1+max(dp1[x-(x>n)*n][j-(x>n)*n],dp2[i][x]));
            }
            for(auto x:adj[(j-1)%n+1]) {
                if(i>=x)x+=n; if(j<x)continue;
                dp2[i][j]=max(dp2[i][j],1+max(dp1[x-(x>n)*n][j-(x>n)*n],dp2[i][x]));
            }
        }
    }
    for(int i=1;i<=n;i++)
        ans=max(ans,{dp1[i][i+n],i});
    if(t==0||ans.first>n-2){
        cout<<ans.first<<'\n'<<ans.second<<'\n';
        return 0;
    }
    /*for(int B=1;B<=n;B++){
        if(rev[B].empty())continue;
        vector<int>dis(n+1);
        for(auto i:adj[B])dis[i]=1;
        for(int C=B%n+1;C-B;C=C%n+1){
            if(!dis[C]) continue;
            for(auto j:adj[C])
                dis[j]=max(dis[j],dis[C]+1);
            auto x=upper_bound(rev[B].begin(),rev[B].end(),C);
            if(x==rev[B].end())
                x=rev[B].begin();
            if(*x<C&&C<B)break;
            if(*x>B&&C<B)break;
            if(*x<C&&B<*x)break;
            for(auto D:adj[C]) if(*x>B){if(*x<D||D<B)
                ans=max(ans,{dis[C]+2+max(dp1[D+(D<B)*n][B+(D>B)*n],dp2[*x][D+(D<B)*n]),*x});
            } else if(B>D&&D>*x)
                ans=max(ans,{dis[C]+2+max(dp2[*x][D],dp1[D][B]),*x});
        }
    }*/
    for(int B=1;B<=n;B++){
        if(rev[B].empty())continue;
        vector<int>dis(n+1);
        for(auto i:adj[B])dis[i]=1;
        for(int C=(B+n-2)%n+1;C-B;C=(C+n-2)%n+1){
            if(!dis[C]) continue;
            for(auto j:adj[C])
                dis[j]=max(dis[j],dis[C]+1);
            auto x=lower_bound(rev[B].begin(),rev[B].end(),C);
            if(x==rev[B].begin())
                x=--rev[B].end();
            else x--;
            if(*x>C&&C>B)break;
            if(*x<B&&C>B)break;
            if(*x>C&&B>*x)break;
            for(auto D:adj[C]) if(*x<B){if(*x>D||D>B)
                ans=max(ans,{dis[C]+2+max(dp1[D+(D<*x)*n][*x+(D>B)*n],dp2[B][D+(D<*x)*n]),*x});
            } else if(B<D&&D<*x)
                ans=max(ans,{dis[C]+2+max(dp1[D][*x],dp2[B][D]),*x});
        }
    }
    cout<<ans.first<<'\n'<<ans.second<<'\n';
}

Compilation message

race.cpp: In function 'int main()':
race.cpp:23:17: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   23 |                 if(i>x)x+=n; if(j<=x)continue;
      |                 ^~
race.cpp:23:30: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   23 |                 if(i>x)x+=n; if(j<=x)continue;
      |                              ^~
race.cpp:27:17: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   27 |                 if(i>=x)x+=n; if(j<x)continue;
      |                 ^~
race.cpp:27:31: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   27 |                 if(i>=x)x+=n; if(j<x)continue;
      |                               ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 1 ms 604 KB Output isn't correct
3 Incorrect 1 ms 604 KB Output isn't correct
4 Correct 1 ms 604 KB Output is correct
5 Correct 1 ms 860 KB Output is correct
6 Correct 2 ms 860 KB Output is correct
7 Correct 2 ms 1004 KB Output is correct
8 Incorrect 2 ms 1112 KB Output isn't correct
9 Correct 3 ms 1116 KB Output is correct
10 Correct 6 ms 1444 KB Output is correct
11 Correct 4 ms 1372 KB Output is correct
12 Correct 17 ms 2216 KB Output is correct
13 Runtime error 31 ms 5572 KB Execution killed with signal 11
14 Correct 41 ms 3676 KB Output is correct
15 Runtime error 111 ms 9544 KB Execution killed with signal 11
16 Runtime error 135 ms 10040 KB Execution killed with signal 11
17 Runtime error 114 ms 9532 KB Execution killed with signal 11
18 Correct 51 ms 4440 KB Output is correct
19 Runtime error 190 ms 10084 KB Execution killed with signal 11
20 Runtime error 164 ms 10096 KB Execution killed with signal 11