#82. 【UR #7】水题生成器
先写了一个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;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步