Fork me on GitHub

#82. 【UR #7】水题生成器

uoj 传送门

这是uoj上的题解

先写了一个45分的dfs

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL n,m,ans[50],P=1;
void dfs(int x,LL sum)
{
    if(x==n+1)
    {
        if(sum==m){
            for(int i=1;i<x;i++) printf("%lld\n",ans[i]);
            exit(0);
        }
        return;
    }
    if(sum==m){
        for(int i=1;i<x;i++) printf("%lld\n",ans[i]);
        exit(0);
    }
    for(LL i=m-sum;i>=ans[x-1];i--)
    {
        if(P%i==0) ans[x]=i,dfs(x+1,sum+i);
    }
}
int main()
{
    scanf("%lld%lld",&n,&m);
    for(int i=2;i<=n;i++) P*=1ll*i;
    ans[0]=1;
    dfs(1,0);
    return 0;
}

好像有贪心的写法
http://uoj.ac/submission/12608参考

阶乘进位制?

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL n,m,tot=1;
int main()
{
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++) tot*=1ll*i;

    for(int i=1;i<=n;i++)
    {
        tot/=i;
        if(tot<=m)
        {
            printf("%lld\n",tot*(m/tot));
            m%=tot;
        } 
    } 
    return 0;
} 
posted @   primes  阅读(167)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示