UOJ 82 [UR #7]水题生成器

来源:互联网 发布:基督教歌曲下载软件 编辑:程序博客网 时间:2024/05/20 00:14

贪心

发现n!的约数也就几万个,然后就可以贪心,每次找最大的减,一定能减完。

证明:我不会

官方题解:http://vfleaking.blog.uoj.ac/blog/219

#include<cstdio>#include<algorithm>#define ll long longusing namespace std;int prime[9]={0,2,3,5,7,11,13,17,19}, cnt[9], ncnt;ll num[50000];void dfs(int now, ll x){    if(now>8)    {        num[++ncnt]=x;        return;    }    dfs(now+1,x);    for(int i = 1; i <= cnt[now]; i++)    {        x*=prime[now];        dfs(now+1,x);    }}int main(){    int n; ll m;    scanf("%d%lld",&n,&m);    for(int i = 1; i <= n; i++)    {        int temp = i;        for(int j = 1; temp != 1; j++)        {            while(temp%prime[j] == 0)            {                temp /= prime[j];                cnt[j]++;            }        }    }    dfs(1,1);    sort(num+1,num+1+ncnt);    while(m)    {        int l = 1, r = ncnt;        while(l<r)        {            int mid = (l+r+1)>>1;            if(num[mid]<=m)l=mid;            else r=mid-1;        }        m-=num[l];        printf("%lld\n",num[l]);    }}
0 0
原创粉丝点击