답안 #986346

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
986346 2024-05-20T11:04:42 Z vjudge1 Sailing Race (CEOI12_race) C++17
0 / 100
363 ms 5208 KB
#include<bits/stdc++.h>
using namespace std;   
int dp1[1000][1000],dp2[1000][1000];
pair<int,int>ans;
vector<int>adj[501],rev[501];
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=1;d<=n;d++){
        for(int i=1,j;i+d<=2*n;i++){
            j=i+d;
            for(auto x:adj[(i-1)%n+1]) {
                if(i<x+n&&x+n<=j)x+=n; if(x<=i||j<x)continue;
                dp1[i][j]=max(dp1[i][j],1+max(dp1[x][j],dp2[i][x]));
            }
            for(auto x:adj[(j-1)%n+1]) {
                if(i<=x+n&&x+n<j)x+=n; if(x<i||j<=x)continue;
                dp1[i][j]=max(dp1[i][j],1+max(dp1[x][j],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>B)continue;
            }
            if(*x>B&&C<B)break;
            for(auto D:adj[C]) if(*x>B){if(*x<D&&D<B)
                ans=max(ans,{dis[C]+1+max(dp1[D][B],dp2[*x][D]),*x});
            } else if(B<D||D<*x)
                ans=max(ans,{dis[C]+1+max(dp1[D+n][*x+n],dp2[B][D+n]),*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();
                if(*x<B)continue;
            } else x--;
            if(*x<B&&C>B)break;
            for(auto D:adj[C]) if(*x>B){if(*x>D&&D>B)
                ans=max(ans,{dis[C]+1+max(dp1[D][*x],dp2[B][D]),*x});
            } else if(D>B||D<*x)
                ans=max(ans,{dis[C]+1+max(dp1[D+n][B+n],dp2[*x][D+n]),*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+n&&x+n<=j)x+=n; if(x<=i||j<x)continue;
      |                 ^~
race.cpp:23:40: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   23 |                 if(i<x+n&&x+n<=j)x+=n; if(x<=i||j<x)continue;
      |                                        ^~
race.cpp:27:17: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   27 |                 if(i<=x+n&&x+n<j)x+=n; if(x<i||j<=x)continue;
      |                 ^~
race.cpp:27:40: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   27 |                 if(i<=x+n&&x+n<j)x+=n; if(x<i||j<=x)continue;
      |                                        ^~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Incorrect 1 ms 604 KB Output isn't correct
3 Incorrect 1 ms 604 KB Output isn't correct
4 Incorrect 1 ms 812 KB Output isn't correct
5 Incorrect 1 ms 856 KB Output isn't correct
6 Incorrect 2 ms 856 KB Output isn't correct
7 Incorrect 4 ms 860 KB Output isn't correct
8 Incorrect 3 ms 1112 KB Output isn't correct
9 Incorrect 3 ms 1116 KB Output isn't correct
10 Incorrect 8 ms 1372 KB Output isn't correct
11 Incorrect 4 ms 1116 KB Output isn't correct
12 Incorrect 22 ms 2140 KB Output isn't correct
13 Incorrect 41 ms 2908 KB Output isn't correct
14 Incorrect 41 ms 3768 KB Output isn't correct
15 Incorrect 220 ms 4808 KB Output isn't correct
16 Incorrect 273 ms 5076 KB Output isn't correct
17 Incorrect 220 ms 4812 KB Output isn't correct
18 Incorrect 55 ms 4444 KB Output isn't correct
19 Incorrect 317 ms 5208 KB Output isn't correct
20 Incorrect 363 ms 4956 KB Output isn't correct