首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

LA 3177 万里长城守卫(推理+二分)

2013-01-28 
LA 3177 长城守卫(推理+二分)训练指南书上推理是对的,但书上代码个人觉得是有问题的,但却能够AC,真是不解。

LA 3177 长城守卫(推理+二分)

训练指南书上推理是对的,但书上代码个人觉得是有问题的,但却能够AC,真是不解。

#include <iostream>using namespace std;int a[100005],elft[2],rig[2],n;int OK(int ans){int x=a[1],y=ans-a[1],id=0,i;elft[0]=x; rig[0]=0;for(i=2;i<=n;i++){id=!id;if(i&1){rig[id]=min(y-rig[!id],a[i]);elft[id]=a[i]-rig[id];}else{elft[id]=min(x-elft[!id],a[i]);rig[id]=a[i]-elft[id];}}return elft[id]==0;}int main(int argc, char *argv[]){int i,L,R,M;while(cin>>n&&n){   L=R=0;for(i=1;i<=n;i++){cin>>a[i];L=max(L,a[i]+a[i-1]);R=max(R,a[i]*3);}L=max(L,a[1]+a[n]);if(n&1){while(L<R){M=(L+R)>>1;if(OK(M)) R=M; else L=M+1;}}cout<<L<<endl;}return 0;}


 

热点排行