第12回日本情報オリンピック 本選 「電飾(Illumination)」
やるだけ。
実装。
#include <bits/stdc++.h> using namespace std; int n,co,ans; int ren[100004]; int ha[100004]; bool l[100004]; int main(){ scanf("%d",&n); ans = 1; for(int i = 1;i <= n;i++){ int tmp; scanf("%d",&tmp); if(tmp == 0){ l[i] = false; }else{ l[i] = true; } ren[i] = 1; } bool pre = l[1]; int s = 1; for(int i = 2;i <= n;i++){ if(pre == l[i]){ ren[s] =max(1, i - s); ren[i-1] = max(i - s,1); s = i; } pre = l[i]; } ren[n] = max(ren[n],n-s+1); ren[s] = max(ren[s],n-s+1); pre = l[1]; ans = max(ans,ren[1]); for(int i = 2;i <= n;i++){ ans = max(ans,ren[i]); if(pre == l[i]){ ha[co++] = i-1; } pre = l[i]; } ans = max(ans,ren[ha[0]]+ren[ha[0]+1]); for(int i = 0;i < co - 1;i++){ int tmp = ren[ha[i]] + ren[ha[i+1]+1] + ren[ha[i]+1]; ans = max(ans,tmp); } printf("%d\n",ans); return 0; }