链接:
https://odzkskevi.qnssl.com/9c253207c02c61937a00eb712e34af9b?v=1536825252
题意:
x = (b0 - 128)·2^0 + (b1 - 128)·2^7 + (b2 - 128)·2^14 + ... + (bm - 2 - 128)·2^7·(m - 2) + bm - 1·2^7·(m - 1)
对于上式,给出 连续的b 让你求x 一旦碰到一个小于等于128 算一个结束
算出来的答案需要解码偶数/2,奇数加1/-2;
注意,test中有一个样例是unsigned最大值,加一的话直接就爆了,所以需要 -((ans - 1) / 2) - 1;
坑死。
#include <bits/stdc++.h>
typedef unsigned long long ll;
using namespace std;
ll tpow(ll m)
{
m*=7;
ll ans=1;
while(m--) ans*=2;
return ans;
}
ll a[10005];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%llu",&a[i]);
}
int m;
for(int i=0;i<n;++i){
m=0;
ll ans=0;
for(int j=i;j<n;++j){
if(a[j]>=128){
ans+=(a[j]-128)*tpow(m++);
}
else{
ans+=a[j]*tpow(m);
i=j;
break;
}
}
if(ans&1)
printf("%lld\n", -((ans-1)/2)-1);
else printf("%lld\n",ans/2);
}
return 0;
}