zoukankan      html  css  js  c++  java
  • HDU5573

    HDU5573


    做法:本题的关键在于题目限制了n≤2^k,如果可以不选的话,我就会用最左边的1,2,4...凑出n,这里需要用减法,于是先把所有的数都加到答案里,这个值与n的插值,就是我们要消除的。选择一些数的和,等于这个插值除二即可。如果n是个奇数,直接可以计算。如果是偶数,先把n减一,然后在做第k位时使用右儿子。

    #include <bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    ///n<=2^k
    ll n,k;
    int T,CC=0;
    int main() {
        scanf("%d",&T);
        while(T--) {
            scanf("%lld%lld",&n,&k);
            printf("Case #%d:
    ",++CC);
            ll f = 0;
            if(n%2 == 0) --n, f=1;
            ll tmp = ((1LL<<k) - 1 - n)/2LL;
            for(ll i=0;i<k-1;++i) {
                if(tmp&(1LL<<i)) printf("%lld -
    ",(1LL<<i));
                else printf("%lld +
    ",(1LL<<i));
            }
            if(f) {
                if(tmp&(1LL<<(k-1))) printf("%lld -
    ",(1LL<<(k-1))|1);
                else printf("%lld +
    ",(1LL<<(k-1))|1);
            }
            else {
                if(tmp&(1LL<<(k-1))) printf("%lld -
    ",(1LL<<(k-1)));
                else printf("%lld +
    ",(1LL<<(k-1)));
            }
        }
        return 0;
    }
    
    
  • 相关阅读:
    oo第三单元学习总结
    oo第二单元学习总结
    OO第四单元UML作业总结兼OO课程总结
    OO第三单元JML作业总结
    OO第二单元电梯作业总结
    OO第一单元总结
    OOUnit4Summary
    OOUnit3Summary
    OOUnit2Summary
    OOUnit1Summary
  • 原文地址:https://www.cnblogs.com/RRRR-wys/p/9697451.html
Copyright © 2011-2022 走看看