Submission #986767

# Submission time Handle Problem Language Result Execution time Memory
986767 2024-05-21T07:56:13 Z vjudge1 Sailing Race (CEOI12_race) C++17
60 / 100
159 ms 10068 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;
      |                               ^~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 492 KB Output is 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 1116 KB Output is correct
8 Incorrect 2 ms 1116 KB Output isn't correct
9 Correct 3 ms 1280 KB Output is correct
10 Correct 6 ms 1372 KB Output is correct
11 Correct 4 ms 1372 KB Output is correct
12 Correct 22 ms 2216 KB Output is correct
13 Runtime error 29 ms 5580 KB Execution killed with signal 11
14 Correct 33 ms 3868 KB Output is correct
15 Runtime error 110 ms 9548 KB Execution killed with signal 11
16 Runtime error 138 ms 10048 KB Execution killed with signal 11
17 Runtime error 112 ms 9552 KB Execution killed with signal 11
18 Correct 47 ms 4440 KB Output is correct
19 Runtime error 159 ms 9896 KB Execution killed with signal 11
20 Runtime error 158 ms 10068 KB Execution killed with signal 11