这道题是真的长,果然学长们读题超厉害,我们都没读懂题目,实际上这道题是说给你n个数是几个数的128进制系数,求出来每个数非负数sum后,如果求出来是偶数,直接输出x为sum / 2,否则输出x为-sum / 2 + 1。由于x的范围刚好是long long即-2^63 ~ 2^63-1,因此sum的范围就是unsigned long long即0~2^64,这里有一点特殊技巧就是当sum为奇数时不能用(sum + 1) / 2,这样会爆。其他就没了,加油鸭
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int n,x,cnt = 0;
ull sum = 0;
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
if(x < 128)
{
sum += x * (1ll << 7 * cnt);
if(sum % 2) printf("-%llu\n",sum / 2 + 1);
else printf("%llu\n",sum / 2);
sum = cnt = 0;
}
else
{
sum += (x - 128) * (1ll << 7 * cnt);
cnt++;
}
}
return 0;
}