Luogu P1069细胞分裂【分解质因数/数论】By cellur925
发现这题真的坑超多啊...调了一晚上终于过了...我好菜啊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的更多相关文章
- luogu P1069 细胞分裂
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...
- P1069 细胞分裂
P1069 细胞分裂 考虑质因数分解 先将m1,质因数分解后再根据数学定理将所有质数的质数全乘m2 然后将输入的数据相同处理,再判断 顺便说一下判断规矩 1肯定不行 如果分解后有没有m1质因数分解中的 ...
- P1069 细胞分裂——数学题,质因数分解
P1069 细胞分裂 我们求的就是(x^k)|(m1^m2) k的最小值: 先给m1分解质因数,再给每个细胞分解: 如果m1有的质因数,细胞没有就跳过: 否则就记录答案: 注意整数除法下取整的原则: ...
- 洛谷 P1069 细胞分裂 解题报告
P1069 细胞分裂 题目描述 \(Hanks\)博士是\(BT\) (\(Bio-Tech\),生物技术) 领域的知名专家.现在,他正在为一个细胞实验做准备工作:培养细胞样本. \(Hanks\) ...
- 洛谷—— P1069 细胞分裂
https://www.luogu.org/problem/show?pid=1069#sub 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细 ...
- 【洛谷P1069 细胞分裂】
题目链接 首先,光看题就觉得它很扯淡(你哪里来这么多的钱来买试管) 根据某位已经ak过ioi的名为ych的神仙说(一看就是数学题,一看就需要因式分解,emm,我果然没有发现美的眼睛qwq) 那么我们就 ...
- 细胞分裂(洛谷 P1069)
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...
- [CodeForces - 1225D]Power Products 【数论】 【分解质因数】
[CodeForces - 1225D]Power Products [数论] [分解质因数] 标签:题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory ...
- Aladdin and the Flying Carpet (LightOJ - 1341)【简单数论】【算术基本定理】【分解质因数】
Aladdin and the Flying Carpet (LightOJ - 1341)[简单数论][算术基本定理][分解质因数](未完成) 标签:入门讲座题解 数论 题目描述 It's said ...
随机推荐
- IPv4与IPv6数据报格式
IPv4: IPv4数据报中的字段: 版本号:规定了数据报的IP协议版本,通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分,因为不同IP版本使用不同的数据报格式. 首部长度:IPv4数据报可 ...
- appium部分api
转自:http://www.aichengxu.com/view/41510 使用的语言是java,appium的版本是1.3.4,java-client的版本是java-client-2.1.0,建 ...
- 2016/06/09 ThinkPHP3.2.3使用分页
效果图:
- LiberOJ #6210. 「美团 CodeM 决赛」tree 树形DP
题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ...
- JVM的CPU资源占用过高问题的排查
互联网后端架构 https://mp.weixin.qq.com/s/LiqAy2DikbmZzqogb5XRdA JVM的CPU资源占用过高问题的排查 互联网后端架构 今天 上午线上某应用的一台J ...
- HttpSession and Hibernate session
一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是 ...
- 验证外部系统是否成功调用SAP RFC的方法有几种?
- PM12条
PM首先是用户 站在用户角度看待问题 用户体验是一个完整的过程 追求效果,不做没用的东西 发现需求,而不是创造需求 决定不做什么,往往比决定做什么更重要 用户是很难被教育的,要迎合用户,而不是改变用户 ...
- hihocoder 1082 然而沼跃鱼早就看穿了一切 (替换指定的串 )
#1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句 ...
- Scanner、String(java基础知识十二)
1.Scanner的概述和方法介绍 * A:Scanner的概述 * 是一个从键盘输入的类,有final修饰,不能被子类继承 * Scanner sc = new Scanner(System.in) ...