题意&思路: 首先根据红色边框部分的公式算出x,再有绿色部分得知,如果x是偶数则直接除以2,x是奇数则(x+1)/-2。
PS:这题有数据会爆掉unsigned long long,就是在最后奇数转换的时候。所以转换的时候可以变公式为-((x-1)/2+1)。
代码:
#include <iostream>
#include <queue>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#define INF 0x3f3f3f3f using namespace std;
typedef unsigned long long ll;
const int maxn = ;
ll buf[maxn]; int main(){
int n;
scanf("%d",&n);
for(int i=; i<n; i++){
scanf("%llu",&buf[i]);
}
for(int i = ; i<n; i++){
int j = i;
ll sum = ,base = ;
while(j<n){
if(buf[j]>=){
sum += (buf[j]-)*base;
base*=;
j++;
}
else{
sum = sum + buf[j]*base;
i = j;
break;
}
}
if(sum&)
printf("%lld\n",(long long)-((sum-)/+));
else
printf("%llu\n",sum/);
}
return ;
}