Decoding of Varints(阅读理解题 Gym_101611D)
Posted sykline
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Decoding of Varints(阅读理解题 Gym_101611D)相关的知识,希望对你有一定的参考价值。
题意&思路: 首先根据红色边框部分的公式算出x,再有绿色部分得知,如果x是偶数则直接除以2,x是奇数则(x+1)/-2。
PS:这题有数据会爆掉unsigned long long,就是在最后奇数转换的时候。所以转换的时候可以变公式为-((x-1)/2+1)。
代码:
1 #include <iostream> 2 #include <queue> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cmath> 6 #include <cstring> 7 #define INF 0x3f3f3f3f 8 9 using namespace std; 10 typedef unsigned long long ll; 11 const int maxn = 11000; 12 ll buf[maxn]; 13 14 15 int main(){ 16 int n; 17 scanf("%d",&n); 18 for(int i=0; i<n; i++){ 19 scanf("%llu",&buf[i]); 20 } 21 for(int i = 0; i<n; i++){ 22 int j = i; 23 ll sum = 0,base = 1; 24 while(j<n){ 25 if(buf[j]>=128){ 26 sum += (buf[j]-128)*base; 27 base*=128; 28 j++; 29 } 30 else{ 31 sum = sum + buf[j]*base; 32 i = j; 33 break; 34 } 35 } 36 if(sum&1) 37 printf("%lld ",(long long)-((sum-1)/2+1)); 38 else 39 printf("%llu ",sum/2); 40 } 41 return 0; 42 }
以上是关于Decoding of Varints(阅读理解题 Gym_101611D)的主要内容,如果未能解决你的问题,请参考以下文章
4609: [Wf2016]Branch Assignment 最短路 DP (阅读理解题)
每日一题 UVA - 213 Message Decoding 模拟解码+读入函数+阅读题
HDU 5514 Game of Flying Circus