zoukankan      html  css  js  c++  java
  • hdu-5747 Aaronson(水题)

    题目链接:

    Aaronson

    Time Limit: 4000/2000 MS (Java/Others)    

    Memory Limit: 131072/131072 K (Java/Others)


    Problem Description
    Recently, Peter saw the equation x0+2x1+4x2+...+2mxm=n. He wants to find a solution (x0,x1,x2,...,xm) in such a manner that i=0mxi is minimum and every xi (0im) is non-negative.
     
    Input
    There are multiple test cases. The first line of input contains an integer T (1T105), indicating the number of test cases. For each test case:

    The first contains two integers n and m (0n,m109).
     
    Output
    For each test case, output the minimum value of i=0mxi.
     
    Sample Input
    10
    1 2
    3 2
    5 2
    10 2
    10 3
    10 4
    13 5
    20 4
    11 11
    12 3
     
    Sample Output
    1
    2
    2
    3
    2
    2
    3
    2
    3
    2
     
    题意:

    把n拆成这样,系数和最小,贪心;
     
    AC代码:
     
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    //#include <bits/stdc++.h>
    #include <stack>
    
    using namespace std;
    
    #define For(i,j,n) for(int i=j;i<=n;i++)
    #define mst(ss,b) memset(ss,b,sizeof(ss));
    
    typedef  long long LL;
    
    template<class T> void read(T&num) {
        char CH; bool F=false;
        for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
        for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
        F && (num=-num);
    }
    int stk[70], tp;
    template<class T> inline void print(T p) {
        if(!p) { puts("0"); return; }
        while(p) stk[++ tp] = p%10, p/=10;
        while(tp) putchar(stk[tp--] + '0');
        putchar('
    ');
    }
    
    const LL mod=1e9+7;
    const double PI=acos(-1.0);
    const int inf=1e9;
    const int N=1e5+10;
    const int maxn=500+10;
    const double eps=1e-8;
    
    LL f[60];
    void Init()
    {
        f[0]=1;
        For(i,1,50)
        {
            f[i]=f[i-1]*2;
        }
    }
    
    int main()
    {       
    
            int t;
            read(t);
            Init();
            while(t--)
            {
             int n,m;
             read(n);read(m);
             int ans=0;
             for(int i=min(40,m);i>=0;i--)
             {
                if(n>=f[i])
                {
                    ans+=n/f[i];
                    n=n%f[i];
                }
             }
             printf("%d
    ",ans);
            }
            return 0;
    }
    

      

  • 相关阅读:
    Bootstrap入门
    CSS3动画详解(图文教程)
    CSS3属性详解(图文教程)
    CSS3选择器详解
    HTML5详解
    jQuery动画详解
    jQuery的介绍和选择器详解
    html 出现粒子线条,鼠标移动会以鼠标为中心吸附的特效之canvas-nest.js插件
    div 内容宽度自适应、超出后换行
    layui layui.open弹窗后按enter键不停弹窗问题的解决
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5699881.html
Copyright © 2011-2022 走看看