JZOJ 1763. Gift

匿名 (未验证) 提交于 2019-12-02 23:47:01

题目

Description

Input

  输入的第一行为一个整数t。
  接下来t行,每行包含九个自然数。

Output

  输出t行
  每行一个整数,表示2^a+2^b+2^c+2^d+2^e+2^f+2^g+2^h+i。

Sample Input

1 21 30 0 0 0 0 0 0 2147483647 

Sample Output

3223322629

Data Constraint

Hint

【数据规模】
  40% t<=1000
  100% t<=100000 a,b,c,d,e,f,g,h<=60 i<=9223372036854775808

分析

  • unsigned long long 开不开高精都可以

代码

#include<cstdio> using namespace std; typedef long long ll; typedef unsigned long long ull; int a,b,c,d,e,f,g,h; ull ans; ull tmp; ull i; #define rep(x,y,z) for(int i=(x);i<=(y);i+=(z)) int main() {     int cas;     ull com=((ull)9223372036*(ull)1000000000)+(ull)854775808;     scanf("%d",&cas);     while(cas--)     {         ans=0;         scanf("%d%d%d%d%d%d%d%d%llu",&a,&b,&c,&d,&e,&f,&g,&h,&i);         if(a==60&&b==60&&c==60&&d==60&&e==60&&f==60&&g==60&&h==60&&i==com)             printf("18446744073709551616\n");         else         {             tmp=1;             ans+=(ull)i;             for (int k=1;k<=a;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             for (int k=1;k<=b;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             for (int k=1;k<=c;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             for (int k=1;k<=d;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             for (int k=1;k<=e;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             for (int k=1;k<=f;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             for (int k=1;k<=g;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             for (int k=1;k<=h;k++) tmp*=(ull)2;             ans+=tmp;tmp=1;             printf("%llu\n",ans);         }     }     return 0; }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!