bzoj 1005: [HNOI2008]明明的烦恼
2016-02-27 22:29
274 查看
#include<cstdio> #include<iostream> #define M 10005 int a[M],n,d[M],f[M],b[M],tot,m; void jia(int a1) { for(int i=1;i<=d[0];i++) for(;a1%d[i]==0;) { b[i]++; a1/=d[i]; } return; } void jian(int a1) { for(int i=1;i<=d[0];i++) for(;a1%d[i]==0;) { b[i]--; a1/=d[i]; } return; } void cheng(int a1) { for(int i=1;i<=a[0];i++) a[i]*=d[a1]; for(int i=1;i<=a[0];i++) { a[i+1]+=a[i]/10; a[i]%=10; } for(;a[a[0]+1];) { a[0]++; a[a[0]+1]=a[a[0]]/10; a[a[0]]%=10; } } int main() { scanf("%d",&n); for(int i=2;i<=n;i++) if(!f[i]) for(int j=2*i;j<=n;j+=i) f[j]=1; for(int i=2;i<=n;i++) if(!f[i]) { d[0]++; d[d[0]]=i; } for(int i=2;i<=n-2;i++) jia(i); for(int i=1;i<=n;i++) { int a1; scanf("%d",&a1); if(a1==-1) m++; else { for(int j=1;j<a1;j++) jian(j); tot+=a1-1; } } for(int i=1;i<=n-2-tot;i++) { jia(m); jian(i); } a[0]=1; a[1]=1; for(int i=1;i<=d[0];i++) for(;b[i]>0;b[i]--) cheng(i); for(int i=a[0];i;i--) printf("%d",a[i]); return 0; }
该题运用到了树的prufer编码,然后一个复杂的数学式子化简。http://www.cnblogs.com/noip/archive/2013/03/10/2952520.html
相关文章推荐
- 【CodeForces】A. Helpful Maths
- bzoj3514 Codechef MARCH14 GERALD07加强版 LCT&&主席树
- mysql(mariadb)语句
- thinkphp架构
- Java泛型
- Java开发岗位面试题
- PAT 1038
- Introduction to Android --1.1
- PHP---加密
- java并发(二十五)java7之fork-join框架
- Think PHP 日志文件
- 关于软件工程以及自我的解析
- RPi 2B python opencv camera demo example
- 8VC Venture Cup 2016 - Elimination Round-C. Block Towers(二分或暴力+数学)
- Android简单实现仿支付宝新年红包活动页面的动态布局效果
- Eclipse中安卓程序打包及签名
- POJ2378(树形DP)
- 手把手教你怎么免费为微信公众号接入智能客服
- 【CodeForces】A. Twins
- hdu 1565 方格取数(1)(最小割)