洛谷 P1069 细胞分裂 解题报告
P1069 细胞分裂
题目描述
\(Hanks\)博士是\(BT\) (\(Bio-Tech\),生物技术) 领域的知名专家。现在,他正在为一个细胞实验做准备工作:培养细胞样本。
\(Hanks\) 博士手里现在有\(N\)种细胞编号从\(1\)~\(N\),一个第\(i\)种细胞经过\(1\)秒钟可以分裂为\(S_i\)个同种细胞(\(S_i\)为正整数)。现在他需要选取某种细胞的一个放进培养皿,让其自由分裂,进行培养。一段时间以后,再把培养皿中的所有细胞平均分入\(M\)个试管,形成\(M\)份样本,用于实验。\(Hanks\)博士的试管数\(M\)很大,普通的计算机的基本数据类型无法存储这样大的\(M\)值,但万幸的是,\(M\)总可以表示为\(m1\)的\(m2\)次方,即\(M = m_1^{m_2}\),其中\(m_1\),\(m_2\)均为基本数据类型可以存储的正整数。
注意,整个实验过程中不允许分割单个细胞,比如某个时刻若培养皿中有\(4\)个细胞,
\(Hanks\)博士可以把它们分入\(2\)个试管,每试管内\(2\)个,然后开始实验。但如果培养皿中有\(5\)个细胞,博士就无法将它们均分入\(2\)个试管。此时,博士就只能等待一段时间,让细胞们继续分裂,使得其个数可以均分,或是干脆改换另一种细胞培养。
为了能让实验尽早开始,\(Hanks\)博士在选定一种细胞开始培养后,总是在得到的细胞“刚好可以平均分入\(M\)个试管”时停止细胞培养并开始实验。现在博士希望知道,选择哪种细胞培养,可以使得实验的开始时间最早。
输入输出格式
输入格式:
第一行有一个正整数\(N\),代表细胞种数。
第二行有两个正整数\(m1,m2\)以一个空格隔开,即表示试管的总数\(M = m_1^{m_2}\)
第三行有\(N\)个正整数,第\(i\)个数\(S_i\)表示第\(i\)种细胞经过\(1\)秒钟可以分裂成同种细胞的个数。
输出格式:
输出文件 cell.out 共一行,为一个整数,表示从开始培养细胞到实验能够开始所经过的最少时间(单位为秒)。
如果无论 Hanks 博士选择哪种细胞都不能满足要求,则输出整数-1。
本蒟蒻十分不擅长做数学题,于是决定认真对待每一道数学题。
来分析一波,我们需要满足这个式子
- \(m_1^{m_2}|S_i^{q}\)
我们要找到最小的整数\(q\)值
当然,我们不可能把这个乘开看看能否整除,而应该分解质因数比较。
将\(m_1\)分解,对她的质因数\(q_i\)乘以\(m_2\),在看看要多少个\(S_i\)凑到一起去才能搞到比\(q_i*m_2\)还多的质因子\(q_i\),于是对于每个\(S_i\),我们都可以求的她的最小要求数。
取最小的即可。
code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=30010;
const int inf=0x3f3f3f3f;
int n,m1,m2,cnt=0;
int a[N];//分解m1后质因子的个数
int pre[N],is_pre[N];
void seperate()
{
memset(a,0,sizeof(a));
int i=1,mm=m1;
while(mm&&i<=cnt)
{
while(mm&&mm%pre[i]==0)
{
mm/=pre[i];
a[pre[i]]++;
}
i++;
}
for(int i=1;i<=m1;i++)
a[i]*=m2;
}
int main()
{
memset(is_pre,1,sizeof(is_pre));
cin>>n>>m1>>m2;
for(int i=2;i<=m1;i++)
{
if(is_pre[i])
pre[++cnt]=i;
for(int j=1;pre[j]*i<=m1&&j<=cnt;j++)
{
is_pre[pre[j]*i]=false;
if(i%pre[j]==0) break;
}
}
seperate();
int s,m_min=inf,m_max=0;
for(int i=1;i<=n;i++)
{
int flag=0;
m_max=0;
scanf("%d",&s);
for(int j=2;j<=m1;j++)
if(a[j])
{
if(s%j!=0)
{
flag=1;
break;
}
int cnt=0;
while(s%j==0)
{
cnt++;
s/=j;
}
if(a[j]%cnt==0)
m_max=max(m_max,a[j]/cnt);
else
m_max=max(m_max,a[j]/cnt+1);
}
if(m_max&&!flag&&m_min>m_max)
m_min=m_max;
}
if(m1==1&&n!=0)
{
printf("0\n");
return 0;
}
if(m_min==inf)
cout<<"-1"<<endl;
else
cout<<m_min<<endl;
return 0;
}
2018.4.25
洛谷 P1069 细胞分裂 解题报告的更多相关文章
- 洛谷—— P1069 细胞分裂
https://www.luogu.org/problem/show?pid=1069#sub 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细 ...
- 【洛谷P1069 细胞分裂】
题目链接 首先,光看题就觉得它很扯淡(你哪里来这么多的钱来买试管) 根据某位已经ak过ioi的名为ych的神仙说(一看就是数学题,一看就需要因式分解,emm,我果然没有发现美的眼睛qwq) 那么我们就 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- 洛谷 P1503 鬼子进村 解题报告
P1503 鬼子进村 题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. ...
- 洛谷 P3177 树上染色 解题报告
P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...
- 洛谷 P4705 玩游戏 解题报告
P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...
随机推荐
- 运行supervisorctl reload报错解决方法
在进行守护进程时运行supervisorctl reload出现“error: <class 'socket.error'>, [Errno 2] No such file or dire ...
- Linux Namespace : PID
PID namespace 用来隔离进程的 PID 空间,使得不同 PID namespace 里的进程 PID 可以重复且互不影响.PID namesapce 对容器类应用特别重要, 可以实现容器内 ...
- Webpack 2 视频教程 003 - Webpack 项目初始化
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- CentOS7下安装Docker-Compose操作记录
Docker-Compose是一个部署多个容器的简单但是非常必要的工具.安装Docker-Compose之前,请先安装 python-pip 一.安装 python-pip [root@workben ...
- 使用Megacli64对服务器物理磁盘做Raid并通过uuid方式挂载
需求说明:公司最近来了一批服务器,用于大数据业务部署.数据节点服务器由14块物理磁盘,其中有2块是900G的盘,12块是4T的盘.在服务器系统安装时,进入系统的BIOS界面:1)将2块900G的磁盘做 ...
- EnglishGame
https://github.com/zhangxue520/EnglishGame/blob/master/EnglishGame <程序设计实践I> 题目: 打字训练测试软 ...
- HTML DOM 学习笔记
一.HTML DOM定义了所有HTML元素的对象和属性,以及访问他们的方法即:HTML DOM是关于如何获取,修改,添加,删除HTML元素的标准二.DOM节点1.分类整个文档是一个文档节点每个HTML ...
- JavaScript 字符串与数组互转,并保持数据去重、排序功能
var valueArr = new Array(); if( $("input[name='type']").val() != ""){ valueArr = ...
- Jenkins Jfrog Artifactory 以及docker下的pipeline 容器编排实践
1. 测试环境情况: Docker主机 10.24.101.99 JFrog Artifactory 主机 (admin password) jenkinx github原始地址:https://gi ...
- SAP字体调节大小
登陆SAP 之后,菜单下面一行,最右边的那个彩色按钮(SAP GUI),点击“选项”-可视设计-字体设计-固定狂赌字体设计,点击:选择字体 即可.