zoukankan      html  css  js  c++  java
  • cfedu/A/求和

    题目连接

    思路:

    用数组直接标记2^n,n属于(0~~31);用LL或者INT都可以,不会爆。但是ans要用LL。
    
    #include <set>
    #include <map>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    typedef pair<int, int> pa;
    typedef long long  LL;
    const int inf=1e9;//INT_MAX;
    const int maxn=100+10;
    LL ma[100];
    void init()
    {
        LL x=1;
        for(int i=0;i<=32;i++){
            ma[i]=x;
            x*=2;
        }
    }
    int main ()
    {
        init();
        int T;scanf("%d",&T);
        while(T--)
        {
            LL n;
            LL ans=0;
            scanf("%lld",&n);
            LL x1=n;
            LL x2=(n+1);
            if(x1%2==0)//考虑多了,不会爆,
                x1/=2;
            else
                x2/=2;
            ans=x1*x2;
            for(int i=0;i<=32;i++)
            {
                if(n<ma[i])
                    break;
                else
                    ans-=2*ma[i];
            }
            printf("%lld
    ",ans);   
        }   
    }
    想的太多,做的太少。
  • 相关阅读:
    洛谷单元最短路标准版——spfa优化
    airline
    有依赖的背包
    挖地雷
    带分数问题
    子集和问题
    循环比赛日程表
    传纸条
    机器分配
    分组背包
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115612.html
Copyright © 2011-2022 走看看