Time Limit: 1 second
Memory Limit: 128 MB

【问题描述】

Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家。现在,他正在为一个细胞实验做准备工作:培养细胞样本。
Hanks博士手里现在有N种细胞,编号从1~N,一个第i种细胞经过1秒钟可以分裂为Si个同种细胞(Si为正整数)。现在他需要选取某种细胞的一个放进培养皿,让其自由分裂,进行培养。一段时间以后,再把培养皿中的所有细胞平均分入M个试管,形成M份样本,用于实验。Hanks博士的试管数M很大,普通的计算机的基本数据类型无法存储这样大的M值,但万幸的是,M总可以表示为m1的m2次方,即M=m1m2,其中m1,m2均为基本数据类型可以存储的正整数。
注意,整个实验过程中不允许分割单个细胞,比如某个时刻若培养皿中有4个细胞,Hanks博士可以把它们分入2个试管,每个试管内2个,然后开始实验。但如果培养皿中有5个细胞,博士就无法将它们均分入2个试管。此时,博士就只能等待一段时间,让细胞们继续分裂,使得其个数可以均分,或是干脆改换另一种细胞培养。
为了能让实验尽早开始,Hanks博士在选定一种细胞开始培养后,总是在得到的细胞“刚好可以平均分入M个试管”时停止细胞培养并开始实验。现在博士希望知道,选择哪种细胞培养,可以使得实验的开始时间最早。

【输入格式】

共有3行。
第一行有1个整数N,代表细胞种数。
第二行有两个正整数m1,m2,以一个空格隔开,m1m2即表示试管的总数M。
第三行有N个正整数,第i个数表示第i种细胞经过1秒钟可以分裂为同种细胞的个数。

【输出格式】

共1行,为一个整数,表示从开始培养细胞到实验能够开始所经过的最小时间(单位为秒)。
如果无论Hanks博士选择哪种细胞都不能满足要求,则输出整数-1。

【输入样例1】

1
2 1
3

【输出样例1】

-1

【输入输出样例1说明】

经过1秒钟,细胞分裂成3个,经过2秒钟,细胞分裂成9个,……,可以看出无论怎么分裂,细胞的个数都是奇数,因此永远不能分入2个试管。

【输入样例2】

2
24 1
30 12

【输出样例2】

2

【输入输出样例2说明】

第1种细胞最早在3秒后才能均分入24个试管,而第2种最早在2秒后就可以均分(每试管144/(241)=6个)。故实验最早可以在2秒后开始。

【数据范围】

对于50%的数据,有m1m2≤30000。
对于所有的数据,有1≤N≤10000,1≤m1≤30000,1≤m2≤10000,1≤Si≤2,000,000,000。

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=p093

【题意】

【题解】

/*qi^(ti)%(m1^m2)==0;ti要求最小;然后求min(ti);对m1质因数分解;分成a1*a2..ak的形式把a1..ak它们的指数处理出来->b[1..k];然后b[1..k]都乘上m2;对于n个数字;q[i]如果q[i]不能被a1..ak中的某个数字整除;则这个细胞无解;如果能,则处理出这个数字q[i]的质因数a1..ak的各个指数w[1..k]对于w[i]c[i] = (b[i]-1)/w[i] + 1;则time[第i个细胞]=max(c[1..k]);然后找time最小的细胞就好;或者记录无解;m1==1的情况特判一下。
*/

【完整代码】

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)typedef pair<int, int> pii;
typedef pair<LL, LL> pll;const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int N = 1e4+100;
const int M = 3e4 + 100;int n,m1,m2,k;
int q[N],w[M],a[M],b[M],mi[N];
bool can[N];int main()
{//freopen("F:\\rush.txt", "r", stdin);rei(n);rei(m1), rei(m2);if (m1 == 1){puts("0");return 0;}rep1(i, 1, n)rei(q[i]);for (int i = 2;i<=m1;i++)if (m1%i == 0){a[++k] = i;while (m1%i == 0){m1 /= i;b[k]++;}}rep1(i, 1, k)b[i] *= m2;memset(can, true, sizeof can);rep1(i, 1, n){rep1(j, 1, k)w[j] = 0;int ju = -1;rep1(j, 1, k){if (q[i] % a[j] != 0){ju = j;break;}int temp = q[i];while (temp % a[j] == 0){temp /= a[j];w[j]++;}}if (ju != -1){can[i] = false;continue;}int d = -1;rep1(j, 1, k){int temp = (b[j] - 1) / w[j] + 1;if (d == -1)d = temp;elsetemp = max(temp, d);}mi[i] = d;}int ans = -1;rep1(i, 1, n)if (can[i] && (ans == -1 || mi[i] < ans))ans = mi[i];printf("%d\n", ans);return 0;
}

【p093】细胞分裂相关推荐

  1. [生物] - 怎样理解细胞分裂次数是有限制的

    来源:http://hi.baidu.com/ccd2093/blog/item/3248302da2405736349bf71a.html       人之所以会死,是因为人体细胞的分裂次数是有限制 ...

  2. #include NOIP2009 Junior 细胞分裂 ——using namespace wxl;

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...

  3. 细胞分裂java移植_胚胎移植前,先调理好你的子宫内膜!

    原标题:胚胎移植前,先调理好你的子宫内膜! 子宫是胎儿居住的"宫殿",子宫内膜是宫殿中孕育生命的"温床",是胚胎着床发育的地方,子宫内膜是否"肥沃&q ...

  4. 【codevs2952】 细胞分裂2,快速幂模版

    细胞分裂 2 时间限制: 2 s 空间限制: 16000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 著名生物学家F博士发现了一种单细胞生物. 它长得像蚯蚓,分裂 ...

  5. 2017.4.19 细胞分裂 思考记录

    虽说是普及组最强的数论题,,但还是普及组... 搞了非常久...感觉似乎这就是极限了... 这题主要就是分解质因数..  然后看包含所有容器质因数的最少分裂次数 如果对细胞分裂的质因数出现次数增长.容 ...

  6. 跑步呼吸方法(细胞分裂呼吸法)

    细胞分裂法 指的是只用鼻子呼吸,而不张嘴呼吸 在只用鼻子呼吸时,我们的运动对应的一定是低强度的有氧运动,消耗脂肪的比例较高. 而被迫张开嘴巴呼吸时,很可能已经进入高强度的无氧运动了,此时消耗糖类的比例 ...

  7. 洛谷P1069 细胞分裂 数学

    洛谷P1069 细胞分裂 数学 质因数分解 题意 求一个最小的 自然数 x 使 s[ i ]^x 任意一个s[ i ] 能够整除以 m1^m2 只要能够整除以就行 题解 这题就是分解质因数 但是 分解 ...

  8. 【NOIP2009PJ】细胞分裂

    题目描述 ​         Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. ​         Hanks 博士手里现 ...

  9. JS + 递归实现细胞分裂

    JS + 递归实现细胞分裂 题目要求: 1个细胞,一个小时分裂一次,生命周期是3小时,求n小时后容器内,有多少细胞. 解析:这是一个典型的递归问题,过程如下: 第一个小时,只有a态细胞:第二个小时,a ...

最新文章

  1. Flash Builder 4快速入门----学习笔记
  2. 磁盘修复工具TestDisk
  3. android主题编辑器,使用 Theme Editor 设计应用主题背景
  4. iOS扩大按钮的点击范围
  5. 常用的基本Windows数据类型
  6. canvas 多次画图效果_canvas练习之终极的奔跑小人
  7. python命令行解析_python命令行解析函数
  8. CCD摄像头视场角计算公式
  9. LoRa、LoRaWAN及网关相关技术介绍
  10. Cocos-2d 关于SwallowTouch,进一步解释触摸事件分发机制
  11. 2月中国万网域名总量净增2.1万个 份额突破24%
  12. 模型预测控制与机器学习
  13. 超高频RFID R200系列远距离一体化读写器开发测试
  14. ps人物碎片化飞溅效果特效怎么做
  15. 电脑桌面的计算机图标都不见了,如何解决电脑桌面的图标都不见了的问题
  16. 你可能修了一个假的“不净观”
  17. 卓训教育:孩子不爱说话,性格内向怎么办?
  18. 7.5.3 QListWidgetItem条目视图介绍
  19. Lab 1: Booting a PC
  20. qt平台集成google拼音中文输入法

热门文章

  1. FCPX插件:15种棱镜折射图文展示介绍动画效果 Prism Slideshow
  2. Ubuntu 16.04 LTS设置屏幕分辨率并永久保存所设置的分辨率
  3. 三、jQuery 中的 DOM 操作(超详细)
  4. Web开发者的实用网址
  5. 【计算机组成原理】计算机系统结构笔记:合集
  6. 医院信息科招聘计算机专业试题,医院信息科招收计算机科学与技术专业的笔试试题...
  7. 树莓派Raspberry Pi 系统搭建和智能机器人小车的组装调试
  8. Error:NgdBuild:604解决方法
  9. 查看 android打包证书签名
  10. SF1006-ASEMI超快恢复二极管SF1006