2017.4.19 细胞分裂 思考记录
来源:互联网 发布:windows共享文件夹 编辑:程序博客网 时间:2024/06/06 09:30
虽说是普及组最强的数论题,,但还是普及组、、、
搞了非常久。。。感觉似乎这就是极限了、、、
这题主要就是分解质因数、、 然后看包含所有容器质因数的最少分裂次数
如果对细胞分裂的质因数出现次数增长、容器的次方理解不到位的话是很容易晕的。。。
对于容器 12^2 = 2*2*2*2*3*3 12^3=2*2*2*2*2*2*3*3*3
可见 12^3=(2*2*3)^3=2^(2*3)*3^(1*3) 所以底数分解后直接乘指数即可知质因子出现次数
对于细胞 若分裂比为1:4 分裂一次:2^2 分裂二次: 2^2*4=2^4 分裂三次:2^4*4=2^6
可见分裂n次,就是1*n*该因子一次分裂的出现次数 和容器计算方式是一样的
所以直接指数相除就是单个因子的最少分裂次数 统计出最大值 再在所有种类细菌最大值中取个最小值即可
码:
#include<iostream>#include<cstdio>using namespace std;#include<cstring>#define inf 1e12+7#define ll long longll su[30005],lie[30005],cun[30005],ans,lin,s[30005],n,m1,m2,i,j;bool no;int main(){scanf("%lld%lld%lld",&n,&m1,&m2);for(i=1;i<=n;i++)scanf("%lld",&s[i]);for(i=2;i<=m1;i++){if(!(m1%i))lie[++lie[0]]=i;while(!(m1%i))++su[i],m1/=i;}for(i=1;i<=lie[0];i++){su[lie[i]]*=m2;//cout<<lie[i]<<" ";}ans=inf;for(j=1;j<=n;j++){ no=0;memset(cun,0,sizeof(cun));lin=0; for(i=1;i<=lie[0];i++) { if(s[j]%lie[i]){no=1;break;} while(!(s[j]%lie[i]))s[j]/=lie[i],cun[lie[i]]++; if(su[lie[i]]%cun[lie[i]]==0)lin=max(lin,su[lie[i]]/cun[lie[i]]); else lin=max(lin,su[lie[i]]/cun[lie[i]]+1); } if(no)continue;ans=min(ans,lin);}if(ans==inf)printf("-1");else printf("%lld",ans); }
数
0 0
- 2017.4.19 细胞分裂 思考记录
- 细胞分裂
- 细胞分裂
- 2017.4.19 数列 思考记录
- 2017.4.19 多项式输出 思考记录
- 2017.4.1 kth_number 思考记录
- 2017.4.16 车站 思考记录
- 2017.4.16 麦森数 思考记录
- 2017.4.20 火星人 思考记录
- 2017.7.19 Race 思考记录
- 2017.9.19 Gcd 思考记录
- 【p093】细胞分裂
- 算法:细胞分裂
- 2017.4.5 假期的宿舍 思考记录
- 2017.4.16 阶乘之和 思考记录
- 2017.4.16 幂次方 思考记录
- 2017.4.16 级数求和 思考记录
- 2017.4.20 比例简化 思考记录
- 文章标题 Silver Cow Party
- 笔记本外接显示器设置全屏壁纸
- linux中的atexit
- java byte/char/string/int之间的转化
- Android之如何让Android studio编译更快
- 2017.4.19 细胞分裂 思考记录
- IIC学习
- 解决Jupyter notebook[import tensorflow as tf]报错
- Android基础系列
- uva 524
- 开始博客之旅
- [HNOI2017]单旋
- Oracle安全
- 分类游戏