题意:
给出abcdefghi,求2^a+2^b+2^c+2^d+2^e+2^f+2^g+2^h+i。a~h≤60,i≤2^63
题解:
发现只有极限数据才会爆unsigned long long,所以先让i-1,然后把它们累加起来,发现这个数据是极限数据就手算出2^64输出字符串,否则就直接+1即可。
注意在算2的n次幂时要1LL<<n,且unsigned long long输出要%llu。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define inc(i,j,k) for(int i=j;i<=k;i++) 5 using namespace std; 6 7 unsigned long long a[10]; int t; 8 int main(){ 9 scanf("%d",&t); 10 while(t--){ 11 inc(i,0,8)scanf("%llu",&a[i]); a[9]=0; 12 if(a[8]==0){ 13 inc(i,0,7)a[9]+=(1LL<<a[i]); printf("%llu ",a[9]); 14 }else{ 15 a[8]--; inc(i,0,7)a[9]+=(1LL<<a[i]); a[9]+=a[8]; 16 if(a[9]==18446744073709551615)printf("18446744073709551616 ");else printf("%llu ",a[9]+1); 17 } 18 } 19 return 0; 20 }
20160810