結果
| 問題 |
No.484 収穫
|
| コンテスト | |
| ユーザー |
rapurasu
|
| 提出日時 | 2017-02-12 22:07:48 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,632 bytes |
| コンパイル時間 | 1,780 ms |
| コンパイル使用メモリ | 158,956 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-29 16:59:55 |
| 合計ジャッジ時間 | 4,186 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 WA * 4 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for (int i=(a);i<(b);i++)
#define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--)
#define REP(i,n) for (int i=0;i<(n);i++)
#define RREP(i,n) for (int i=(n)-1;i>=0;i--)
typedef long long LL;
int N;
int A[2001];
bool check(LL x){
bool ans=false;
bool check[2001];
//終了位置をiとする
REP(i,N){
if(x<A[i])continue;
//右→左
REP(j,N){
check[j]=false;
}
check[i]=true;
REP(j,i){
if(A[j]<=x-i+j)check[j]=true;
}
for(int j=i+1;j<N;j++){
if(A[j]<=x-i-j)check[j]=true;
}
bool c=true;
REP(j,N){
if(check[j]==false){
c=false;
break;
}
}
if(c){
ans=c;
break;
}
//左→右
REP(j,N){
check[j]=false;
}
check[i]=true;
REP(j,i){
if(A[j]<=x-(N-1-i)-(N-1)+j)check[j]=true;
}
for(int j=i+1;j<N;j++){
if(A[j]<=x-(j-i))check[j]=true;
}
c=true;
REP(j,N){
if(check[j]==false){
c=false;
break;
}
}
if(c){
ans=c;
break;
}
}
return ans;
}
LL binary_search(){
LL ub=-1;
LL lb=1000000001;
while(lb-ub!=1){
LL mid=(ub+lb)/2;
if(check(mid)){
lb=mid;
}else{
ub=mid;
}
}
return lb;
}
int main(){
cin>>N;
REP(i,N){
cin>>A[i];
}
//cout<<check(2)<<endl;
cout<<binary_search()<<endl;
return(0);
}
rapurasu