题目传送门

发现这题真的坑超多啊...调了一晚上终于过了...我好菜啊qwq。

题意说的比较明白,让你求满足(si^k)%(m1^m2)==0的最小k值。然后看数据范围我们知道,我们肯定不能暴力的判断,需要应用到算术基本定理的内容。

我的思路:把m1分解质因数,拆成算术基本定理的形式,再把每个质因数的个数乘上m2.

     之后对于每个细胞,我们也将他分解质因数。显然,m1的质因数在si中必须出现,否则消不掉也就不能整除。之后我们找哪个质因数被削掉需要分裂的次数最多,这个次数作为这个细胞的次数。(这里思路有点偏差,算被削掉需要分裂的次数时,是下除上而不是下减上。因为是将si进行乘方。而且还要判断是否能整除,不能整除还要加1)

     至于无解的情况,记录一个step,如果每个细胞都有不存在试管质因子的情况,则step++,最后若step==n判定无解。

思路看起来比较清晰的...不过昨天手残导致了许多错误233

现列举如下:

1.  炸内存。原因是在用细胞质因子与试管质因子逐渐逼近时没有判断边界

2.  由于用到 了许多数组,把数组名自己搞混了==
3.  变量名(循环的ij)搞混了

4.  分解质因数部分板子敲错了,最后应为(m>1),否则遇到平方数就会很不好搞

5.  对特殊情况的考虑:m1=1的时候不需要培养时间,答案为0;si=1时这个细胞不可用。

6.  每次检验完一个细胞恢复初值

Code

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath> using namespace std; int n,cnt,hu;
int m1,m2,ans=0x7fffffff,num,step;
int cell[],pm1[],cm1[],ps[],cs[];
bool vis[]; void init()
{
num=;
memset(vis,,sizeof(vis));
memset(cs,,sizeof(cs));
} int main()
{
// freopen("1.in","r",stdin);
scanf("%d",&n);
scanf("%d%d",&m1,&m2);
if(m1==) {printf("");return ;}
for(int i=;i<=n;i++) scanf("%d",&cell[i]);
for(int i=;i<=sqrt(m1);i++)
if(m1%i==)
{
pm1[++cnt]=i,cm1[cnt]=;
while(m1%i==) m1/=i,cm1[cnt]++;
}
if(m1>) pm1[++cnt]=m1,cm1[cnt]++;
for(int i=;i<=cnt;i++) cm1[i]*=m2;
for(int i=;i<=n;i++)
{
int renew=;
int tmp=cell[i];
if(tmp==) {step++;continue;}
bool flag=;
for(int j=;j<=sqrt(tmp);j++)
if(tmp%j==)
{
vis[j]=;
ps[++num]=j,cs[num]=;
while(tmp%j==) tmp/=j,cs[num]++;
}
if(tmp>)
{
vis[tmp]=;
ps[++num]=tmp;cs[num]++;
}
for(int j=;j<=cnt;j++) if(!vis[pm1[j]]) {step++;flag=;break;}
if(flag) {init();continue;}
int head=;
for(int j=;j<=cnt;j++)
{
while(ps[head]!=pm1[j]&&head<num) head++;
if(cm1[j]%cs[head]==) renew=max(renew,cm1[j]/cs[head]);
else renew=max(renew,cm1[j]/cs[head]+);
}
// printf("%d:%d\n",i,renew);hu++;
ans=min(ans,renew);
init();
}
if(step==n) printf("-1");
else printf("%d",ans);
return ;
}

*  Update  关于复杂度的问题

因为我是把每个细胞分解质因数,所以复杂度可能达到O(n*sqrt(si)),si是2e9级别,n是10000级别。开始我还怀疑了自己的复杂度。

讨论帖

后来经各路dalao指点,发现其实筛出m1的素数那么一搞也行,复杂度就可行了。(可能本题数据太弱所以我也过了?逃)

Luogu P1069细胞分裂【分解质因数/数论】By cellur925的更多相关文章

  1. luogu P1069 细胞分裂

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

  2. P1069 细胞分裂

    P1069 细胞分裂 考虑质因数分解 先将m1,质因数分解后再根据数学定理将所有质数的质数全乘m2 然后将输入的数据相同处理,再判断 顺便说一下判断规矩 1肯定不行 如果分解后有没有m1质因数分解中的 ...

  3. P1069 细胞分裂——数学题,质因数分解

    P1069 细胞分裂 我们求的就是(x^k)|(m1^m2) k的最小值: 先给m1分解质因数,再给每个细胞分解: 如果m1有的质因数,细胞没有就跳过: 否则就记录答案: 注意整数除法下取整的原则: ...

  4. 洛谷 P1069 细胞分裂 解题报告

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

  5. 洛谷—— P1069 细胞分裂

    https://www.luogu.org/problem/show?pid=1069#sub 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细 ...

  6. 【洛谷P1069 细胞分裂】

    题目链接 首先,光看题就觉得它很扯淡(你哪里来这么多的钱来买试管) 根据某位已经ak过ioi的名为ych的神仙说(一看就是数学题,一看就需要因式分解,emm,我果然没有发现美的眼睛qwq) 那么我们就 ...

  7. 细胞分裂(洛谷 P1069)

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

  8. [CodeForces - 1225D]Power Products 【数论】 【分解质因数】

    [CodeForces - 1225D]Power Products [数论] [分解质因数] 标签:题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory ...

  9. Aladdin and the Flying Carpet (LightOJ - 1341)【简单数论】【算术基本定理】【分解质因数】

    Aladdin and the Flying Carpet (LightOJ - 1341)[简单数论][算术基本定理][分解质因数](未完成) 标签:入门讲座题解 数论 题目描述 It's said ...

随机推荐

  1. C语言语句

    /*Console.Write("你能跑得过豹子吗,请输入 能/不能:"); string a = Console.ReadLine();//接收所输入的字符串内容, if (a= ...

  2. hdu 5358 First One 2015多校联合训练赛#6 枚举

    First One Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  3. 技术发展晴雨表 细数CPU接口10年变迁

    http://cpu.zol.com.cn/160/1602240_all.html#p1602240 本文导航 第1页:10年磨10剑 CPU发展突飞猛进 第2页:462与423对垒 开启CPU竞争 ...

  4. Android逆向利器和smali代码修改出错举例-入参类型

    当smali修改代码出错举例1,log如下: 虚拟机层次: 1.本身做出了预测,寄存器v2是符合要求入参,暗示你这个也许是你想要的.VFY: register1 v2 type 17, wanted ...

  5. (转)typedef用法

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  6. notpad++快捷键

    Notpad++快捷键 Notepad++选中行操作 快捷键 使用技巧 作者: Rememberautumn 分类: 其他 发布时间: 2014-09-04 14:18 阅读: 60,106  微信小 ...

  7. CodeChef - COUNTARI FTT+分块

    Arithmetic Progressions Given N integers A1, A2, …. AN, Dexter wants to know how many ways he can ch ...

  8. Provided Maven Coordinates must be in the form 'groupId:artifactId:version'.

    [hadoop@hadoop1 bin]$ ./spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.10-2.2.1 Ex ...

  9. 在Java中如何正确地终止一个线程

    1.使用Thread.stop()? 极力不推荐此方式,此函数不安全且已废弃,具体可参考Java API文档 2.设置终止标识,例如: import static java.lang.System.o ...

  10. 安卓AndroidManifest.xml介绍

    先说一下,我的开发环境为Eclipse 3.7.1 + Android SDK + Android 1.5(API level3) Android最大的一个特点,就是用xml文件来配置,这个演习了Ja ...