【BZOJ】1005 明明的烦恼
来源:互联网 发布:mac版梦幻西游鼠标右键 编辑:程序博客网 时间:2024/06/05 03:57
Overview
【题意】给出标号为
【范围】
Analysis
题解1号
题解2号
上面的题解的推导已经很详细了,公式如下:
先把特殊情况和非法情况处理掉。
对于
对于
接着计算公式。
由于所有看得见的数值都是可直接计算的,所以考虑记录因数个数,然后再用高精度乘单精度。
先明确一点,由于我们最后的结果是整数,所以不论公式长什么样,一定有因数个数非负。
对于阶乘,可以预处理出每个数的情况,然后用前缀和;也可以不断整除取余来累加(小学希望杯培训……)
对于
Sumarize
高精度中分解质因数,将因数累加的使用:
①已知的数都可以直接计算;
②阶乘可以直接用整除来分解,也可以使用前缀和;
③对于小的数,最好用欧拉筛法等方法先求出所有的质因数来优化时间。
Prufer编码:
①构造与还原的方法;
②经常跟度数和树的计数有关。
Code
#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;const int N=1010;int n,d[N];int cnt[N],sum;int v[N],p[N],c[N][N];int rc[N],res[N];inline int read(void){ int s=0,f=1; char c=getchar(); for (;c<'0'||c>'9';c=getchar()) if (c=='-') f=-1; for (;'0'<=c&&c<='9';c=getchar()) s=(s<<1)+(s<<3)+c-'0'; return s*f;}int mutiply(int k){ int m,g=0; for (int i=1;i<=res[0];i++) { m=res[i]*k+g; res[i]=m%10; g=m/10; } for (;g;g/=10) res[++res[0]]=g%10;}int main(void){ n=read(); for (int i=1;i<=n;i++) d[i]=read(); for (int i=1;i<=n;i++) { if (!d[i]) {printf("0\n");return 0;} if (d[i]>0) sum+=cnt[++cnt[0]]=d[i]-1; } if (n==1) {printf("%d\n",!cnt[0]?1:0);return 0;} if (n-2<sum) {printf("0\n");return 0;} for (int i=2;i<=n;i++) { if (!v[i]) p[++p[0]]=i; for (int j=1;j<=p[0];j++) { if (i*p[j]>n) break; v[i*p[j]]=1; if (i%p[j]==0) break; } } for (int i=1;i<=n;i++) for (int j=1;j<=p[0];j++) for (int k=i;k!=1&&k%p[j]==0;k/=p[j]) c[i][j]++; for (int i=1;i<=p[0];i++) rc[i]+=c[n-cnt[0]][i]*(n-2-sum); for (int i=1;i<=n;i++) for (int j=1;j<=p[0];j++) c[i][j]+=c[i-1][j]; for (int i=1;i<=p[0];i++) rc[i]+=c[n-2][i]; for (int i=1;i<=p[0];i++) rc[i]-=c[n-2-sum][i]; for (int i=1;i<=cnt[0];i++) for (int j=1;j<=p[0];j++) rc[j]-=c[cnt[i]][j]; res[0]=res[1]=1; for (int i=1;i<=p[0];i++) for (int j=1;j<=rc[i];j++) mutiply(p[i]); for (int i=res[0];i;i--) printf("%d",res[i]); printf("\n"); return 0;}
0 0
- BZOJ-1005-明明的烦恼
- 【BZOJ】1005 明明的烦恼
- 【BZOJ】1005 明明的烦恼
- bzoj 1005: [HNOI2008]明明的烦恼
- bzoj 1005: [HNOI2008]明明的烦恼
- bzoj 1005 [HNOI2008] 明明的烦恼 题解
- bzoj 1005: [HNOI2008]明明的烦恼
- bzoj 1005 明明的烦恼 Purfer Sequence
- 【Purfer】【bzoj 1005】: [HNOI2008]明明的烦恼
- bzoj 1005 明明的烦恼 【Prufer序列】
- BZOJ 1005 [HNOI2008]明明的烦恼
- BZOJ 1005 [HNOI2008]明明的烦恼
- BZOJ 1005 [HNOI2008]明明的烦恼
- BZOJ 1005 [HNOI2008] 明明的烦恼
- bzoj [1005] [HNOI2008]明明的烦恼
- bzoj 1005: [HNOI2008]明明的烦恼
- bzoj 1005: [HNOI2008]明明的烦恼
- bzoj 1005: [HNOI2008]明明的烦恼
- 软件工程师的工作总结
- rsync两台服务器文件同步
- 对象和类继承
- SQL to mongo Shell to C++
- VR有五种全局光照渲染引擎和各自的优缺点
- 【BZOJ】1005 明明的烦恼
- 使用OpenSSL实现证书操作
- Java位运算总结:位运算用途广泛
- 不期望明天
- Android studio 使用Lambda
- android app -- Picasso 二级缓存加载图片,可控制加载图片大小(附小demo)
- android书籍推荐
- GC专家系列2:Java 垃圾回收的监控
- 连续子数组的最大和