Submission #285247

#TimeUsernameProblemLanguageResultExecution timeMemory
285247CaroLindaSailing Race (CEOI12_race)C++14
100 / 100
1391 ms4984 KiB
#include <bits/stdc++.h> #define sz(x) (int)x.size() #define mkt make_tuple #define lp(i,a,b) for(int i = a ; i < b ; i++ ) #define ff first #define ss second #define eb push_back #define ll long long #define mk make_pair #define pii pair<int,int> #define debug printf #define all(x) x.begin(),x.end() const int MAXN = 510 ; using namespace std ; int N , K , ans, curId ; int t[2] = {-1,1} ; int val[MAXN] ; int dp[MAXN][MAXN][2] , dpLinha[MAXN][MAXN][2] ; vector<int> adj[MAXN] ; bool graph[MAXN][MAXN] ; bool isInside(int x, int L , int R , int type ) { if(type == -1) swap(L,R) ; if( L > R ) return (L <= x || x <= R ) ; return L <= x && x <= R ; } int main() { scanf("%d%d", &N , &K ) ; for(int i = 0 , x ; i < N ; i++ ) while( scanf("%d", &x) && x != 0 ) { if(x == i+1) continue ; adj[i].push_back(x-1) ; graph[i][x-1] = true ; } for(int diff = 1 ; diff < N ; diff++ ) for(int i = 0 ; i < N ; i++ ) for(int j = 0 ; j < 2 ; j++ ) { int R = ( i + diff * t[j] + N ) % N ; int &ptr = dp[i][R][j] ; ptr = 0 ; for(int viz : adj[i] ) { if(!isInside(viz, i , R, t[j] ) ) continue ; ptr = max(ptr, 1 + dp[viz][R][j] ) ; ptr = max(ptr, 1 + dp[viz][ (i+t[j]+N)%N ][ !j ] ) ; if( dpLinha[viz][R][j] > 0 || viz == R ) dpLinha[i][R][j] = max( dpLinha[i][R][j] , 1 + dpLinha[viz][R][j] ) ; } if(ptr > ans ) { ans = ptr ; curId = i ; } } if(K == 0) { printf("%d %d\n" , ans, curId + 1 ); return 0 ; } for(int i = 0 ; i < N ; i++ ) for(int j = 0 ; j < 2 ; j++ ) { for(int g = 0 ; g < N ; g++ )val[g] = 0 ; for(int g = (i + t[j] + N)%N ; g != i ; (g += t[j] + N) %= N ) for(int h = (g + t[j] + N) % N ; h != i ; h = (h + t[j]+N)%N ) { int best = max( dp[h][ (i+t[!j]+N)%N ][j] , dp[h][ (g + t[j] + N)%N ][!j] ) ; if(ans < best + val[h] + 2 && val[h] > 0 && graph[g][i] ) { ans = best + val[h] + 2 ; curId = g ; } if( graph[g][h] ) val[h] = max(val[h] , dpLinha[i][g][j] ) ; } } printf("%d %d\n" , ans, curId + 1 ) ; }

Compilation message (stderr)

race.cpp: In function 'int main()':
race.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   38 |     scanf("%d%d", &N , &K ) ;
      |     ~~~~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...