0
点赞
收藏
分享

微信扫一扫

4/13 cf构造题

曾宝月 2022-04-14 阅读 24
算法

C. Factorials and Powers of Two
难度:1500
暴力枚举二进制的方法。任何一个数都可以由二进制表示出来,暴力枚举出需要最少的阶乘和二进制数。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
const int inf=0x3f3f3f3f;
int a[N],n,k,idx;
int get(int n)
{
    int ans=0;
    while(n)
    {
        if(n&1) ans++;
        n>>=1;
    }
    return ans;
}
void init()
{
    a[idx++]=1;
    for(int i=1;i<=15;i++)
    {
        a[idx++]=i*a[i-1];;
    }
}
signed main()
{
    init();
    int t;cin>>t;
    while(t--)
    {
        cin>>n;
        k=inf;
        for(int i=0;i<(1<<15);i++)
        {
            int m=n,cnt=0;
            for(int j=0;j<15;j++)
            {
                if((i>>j)&1)
                {
                    m-=a[j];cnt++;
                }
            }
            if(m>=0)
                k=min(k,cnt+get(m));
        }
        cout<<k<<endl;
    }
	return 0;
}


举报

相关推荐

0 条评论