这道题是以纯数学的方法来做的,先来讲一讲:
我们以题目中的5 4 1 2 1 1来做例子:
先求出例子中隔数总和:4+1+2+1+1=9。
while(n--){cin>>a;z+=a;}
一句带过。
再上重点:
int x=1;
while(x<=z)x*=2;
在小于9的情况下,x不断乘2,但你以为这样就好了嘛?不,这时的x是多少?我们算一下:
x=1;
x*=2=2;
x<=z;
x*=2=4;
x<=z;
x*=2=8;
x<=z;
x*=2=16;
x>z;
退出。可见x是16,和8有什么关系呢,'/=2'是不是?
while(n--){cin>>a;z+=a;}
int x=1;
while(x<=z)x*=2;
cout<<x/2;
这样可算是成功了!加上其他:
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int n,a,z=0;
cin>>n;
while(n--){cin>>a;z+=a;}
int x=1;
while(x<=z)x*=2;
cout<<x/2;
return 0;
}
注意:因为数据量很不友好(太大了)所以我们要用新框架(之前的文章写过)。
这样就完成了!
谢谢!求点赞!!