思路:数位$DP$

提交:5次(其实之前A过,但是调了调当初的程序。本次是2次AC的)

题解:

我们分别求出$sum(x)=i$,对于一个$i$,有几个$x$,然后我们就可以快速幂解决。

至于求个数用数位$DP$就好了。

#include<cstdio>
#include<iostream>
#include<cstring>
#define ull unsigned long long
#define ll long long
#define R register ll
using namespace std;
#define pause (for(R i=1;i<=10000000000;++i))
#define In freopen("NOIPAK++.in","r",stdin)
#define Out freopen("out.out","w",stdout)
namespace Fread {
static char B[<<],*S=B,*D=B;
#ifndef JACK
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
#endif
inline ll g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
if(ch==EOF) return EOF; do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
} inline bool isempty(const char& ch) {return (ch<=||ch>=);}
inline void gs(char* s) {
register char ch; while(isempty(ch=getchar()));
do *s++=ch; while(!isempty(ch=getchar()));
}
} using Fread::g; using Fread::gs; namespace Luitaryi {
const int N=,M=1e7+;
ll n;
int len,num[N];
ll f[N][N];
inline int qpow(ll a,ll p) { R ret=; a%=M;
for(;p;p>>=,(a*=a)%=M) if(p&) (ret*=a)%=M; return ret;
}
inline ll dfs(int l,bool ul,int c,int d) {//l:长度,ul:上界标记,c:统计1的个数,d:所求一的个数(即我们此时令sum(x)=d)
if(!l) return c==d;
if(!ul&&~f[l][c]) return f[l][c];
R lim=(ul?num[l]:),cnt=;
for(R i=;i<=lim;++i)
cnt+=dfs(l-,ul&&i==lim,c+i,d);
return ul?cnt:f[l][c]=cnt;
}
inline int solve(ll n) { R ans=;
for(;n;n>>=) num[++len]=n&;
for(R i=;i<=len;++i)
memset(f,0xff,sizeof(f)),
ans=(ans*qpow(i,dfs(len,true,,i)))%M;
return ans;
}
inline void main() {
n=g(); printf("%d\n",solve(n));
}
}
signed main() {
Luitaryi::main(); return ;
}

2019.07.21

最新文章

  1. TCP/IP BOOKS
  2. CodeForces 743B Chloe and the sequence (递归)
  3. Oracle IF &amp; CASE语句
  4. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
  5. 判断移动端js代码
  6. SPOJ913 Query on a tree II
  7. jsonp实现原理详细介绍
  8. 十,选择cfee编辑器并学会调试程序。以及结束语。
  9. 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 &amp;amp; 3236 [Ahoi2013] 作业 题解
  10. java基础学习总结01
  11. 完整的struts.xml文件骨架
  12. 洛谷 P1305 新二叉树
  13. vector中的find
  14. 获取安卓的SH1安全码
  15. 针对Oracle用户被锁的一些相关处理方法
  16. Nginx 11阶段的顺序处理
  17. HDU3718 Similarity KM
  18. StringUtils工具类常用方法汇总(截取、去除空白、包含、查询索引)
  19. 3D 特征点概述(2)
  20. CentOS下安装Vmtools

热门文章

  1. 【C++札记】命名空间(namespace)
  2. MySQL安装与连接
  3. Pywinauto使用方法
  4. LIUNX随堂学习-1 用户及查看信息
  5. PAT(B) 1005 继续(3n+1)猜想(Java)
  6. MongoDB部分
  7. (转)js-分享功能(qq,微信,微博)
  8. 16-MySQL DBA笔记-调优基础理论和工具
  9. (二)Struts.xml文件详解
  10. ASP.NET WEB应用程序(.network4.5)MVC 程序的结构解读1