Submission #735622

#TimeUsernameProblemLanguageResultExecution timeMemory
735622groguSailing Race (CEOI12_race)C++14
10 / 100
412 ms4496 KiB
#define here cerr<<"===========================================\n" #define dbg(x) cerr<<#x<<": "<<x<<endl; #include <bits/stdc++.h> #define ld double #define ll long long #define ull unsigned long long #define llinf 100000000000000000LL // 10^17 #define iinf 2000000000 // 2*10^9 #define pb push_back #define popb pop_back #define fi first #define sc second #define endl '\n' #define pii pair<int,int> #define pll pair<ll,ll> #define pld pair<ld,ld> #define all(a) a.begin(),a.end() using namespace std; #define maxn 505 ll n,tip; ll dp[maxn][maxn][2]; bool d[maxn][maxn]; ll nx[maxn][2]; void solv(ll l,ll r,ll x){ dp[l][r][x] = -llinf; if(d[l][r]) dp[l][r][x] = max(dp[l][r][x],1 + dp[r][nx[l][x]][x^1]); for(ll tr = r;tr!=l;tr = nx[tr][x^1]) dp[l][r][x] = max(dp[l][r][x],dp[l][tr][x]); } int main(){ cin >> n >> tip; for(ll i = 1;i<=n;i++){ ll x = -1; while(x!=0){ cin >> x; d[i][x] = 1; } } for(ll i = 1;i<=n;i++){ nx[i][0] = i+1; nx[i][1] = i-1; if(nx[i][0]==n+1) nx[i][0] = 1; if(nx[i][1]==0) nx[i][1] = n; } for(ll d = 1;d<=n;d++){ for(ll l = 1;l<=n;l++){ ll r = l+d; if(r>n) r-=n; solv(l,r,0); solv(r,l,1); } } pll ans = {-1,0}; for(ll i = 1;i<=n;i++){ for(ll j = 1;j<=n;j++){ for(ll x = 0;x<2;x++){ ans = max(ans,{dp[i][j][x],i}); } } } cout<<ans.fi<<endl; cout<<ans.sc<<endl; return (0-0); }
#Verdict Execution timeMemoryGrader output
Fetching results...