2009NOIP普及组真题 3. 细胞分裂

2024-05-07 22:52

本文主要是介绍2009NOIP普及组真题 3. 细胞分裂,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

线上OJ:

一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid=1947

核心思想:

本题的意思是 在所有的 S i Si Si 中,找一个 S i t Si^t Sit 最早能被 m 1 m 2 m1^{m2} m1m2 整除
上述若能整除,则说明:
1、 m 1 m1 m1 的质因数肯定是 S i Si Si 质因数的子集 (换句话说,m1 的质因数都是 Si 的因数。如果 m 1 m1 m1 中某个质因数不能整数 S i Si Si,则整个 S i t Si^t Sit 不可能被 m 1 m 2 m1^{m2} m1m2 整除)
2、若 m 1 m1 m1 的质因数本身是多次幂(比如 m 1 m1 m1 为40,则 m 1 = 2 ∗ 2 ∗ 2 ∗ 5 = 2 3 ∗ 5 m1 = 2*2*2*5 = 2^3*5 m1=2225=235,即质因数2的幂次为3,质因数5的幂次为1)。若此时的 m2 是2,则
m 1 m 2 = ( 2 3 ∗ 5 1 ) 2 = ( 2 3 ∗ 2 ) ∗ ( 5 1 ∗ 2 ) = 2 6 ∗ 5 2 m1^{m2} = (2^3*5^1)^2 = (2^{3*2})*(5^{1*2})=2^6*5^2 m1m2=(2351)2=(232)(512)=2652

如果此时 S i Si Si 的质因数中,2有6个,5有2个,则 1 秒后到达 S i Si Si 即可直接整除 m 1 m 2 m1^{m2} m1m2
如果此时 Si 的质因数中,2有3个,5有1个,则2个周期后可整除 m 1 m 2 m1^{m2} m1m2
如果此时 Si 的质因数中,2有2个,5有1个,则3个周期后才能整除 m 1 m 2 m1^{m2} m1m2

故, S i Si Si 的分裂周期为 S i Si Si 的质因数中分裂周期最多的那个

关键步骤:

1、先计算 m 1 m1 m1 的质因数,存储到数组 p [ i ] p[i] p[i] 中;用 c [ i ] c[i] c[i] 记录质因数 p [ i ] p[i] p[i] 的个数。
2、如果是质数,要单独考虑
3、如果m1为1,则无需计算,直接输出
4、在读入每个 S i Si Si 时按以下步骤进行:
a. 检查m1的每一个质因数是否都是 Si 的因数,如果有一个不是,则Si不可能被除尽
b. 检查每一个质因数在 Si 中出现的次数
c. 求出每一个质因数需经过几个周期方能被 m 1 m1 m1 中对应的幂次整除

举例: S i Si Si 为800,m1为40,m2 是2。则 S i = 2 5 ∗ 5 2 , m 1 m 2 = 2 6 ∗ 5 2 Si=2^5*5^2,m1^{m2} =2^6*5^2 Si=2552m1m2=2652。细胞 Si 经过一个周期变为 2 5 ∗ 5 2 2^5*5^2 2552,无法被 2 6 ∗ 5 2 2^6*5^2 2652 整除,经过两个周期变为 2 10 ∗ 5 4 2^{10}*5^4 21054,可以被 2 6 ∗ 5 2 2^6*5^2 2652 整除。所以 Si=800的需要2个周期。

d. 找出 Si 的所有质因数中分裂周期最多的那个
5、所有的 Si 都读完后,找出分裂周期最小的数值,就是本题的答案。

题解代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;const int N = 30005;int n, m1, m2, s, ans, maxn;
// p[i]记录m1的第i个质因数,c[i]表示m1的第i个质因数的个数。比如12=2*2*3,所以p[1]=2,c[1]=2,p[2]=3,c[2]=1
int p[N], c[N], cnt = 0; // cnt记录m1的质因数的个数。比如 12的质因数是2和3,则cnt=2
bool isprime = true; // m1是否为质数int main()
{scanf("%d %d %d", &n, &m1, &m2);if(m1 == 1)  // 如果m1为1,说明就1个试管,直接放即可{printf("0\n");return 0;}int x = m1;for(int i = 2; (i*i <= m1) && x; i++) // 求出m1的所有质因数,以及每个质因数的个数{if( x % i == 0 ) // 如果存在i能整除m1{isprime = false;  // 如果找到一个质因数,则m1不是质数p[++cnt] = i; // 将质因数 i 存到p数组里,p数组从p[1]开始}while( x % i == 0 ){c[cnt]++; // 记录m1的质因数 i 的个数x /= i;}        }if(isprime) // 如果是质数,则上述for循环无法找到质因数。{p[++cnt] = m1; // 质数的质因数只有自己c[cnt] = 1;}ans = INF;while(n--) // 读入n个数,逐次判断{maxn = -INF; // 每一轮开始前,先初始化。maxn 记载读入s需要分裂的周期bool flag = true;scanf("%d", &s);for(int i = 1; i <= cnt && s; i++)  // 检查m1的每一个质因数是否都是s的因数{int a = 0;if(s % p[i]) // 如果m1的质因数p[i]不是s的因数,则s不可能被m1^m2除尽{flag = false;break;}while(s % p[i] == 0)  // 如果能除尽,则统计s内有多少个p[i]{a++;s /= p[i];}maxn = max(maxn, (c[i]*m2 + a - 1)/a); // s的分裂周期为s的质因数中分裂周期最多的那个。举例:质因数2需要分裂5次能满足,质因数3需要分裂2次就能满足,则s的分裂周期为5}if(!flag) continue;ans = min(ans, maxn);  // 在所有的s种,找一个分裂周期最小的}if(ans == INF) printf("-1\n");else  printf("%d\n", ans);return 0;
}

这篇关于2009NOIP普及组真题 3. 细胞分裂的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968627

相关文章

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

找不同-第15届蓝桥省赛Scratch初级组真题第4题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第183讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。 第15届蓝桥杯省赛已于2024年8月24日落下帷幕,编程题一共有5题,分别如下: 猪八戒落地 游乐场 画西瓜 找不同 消

信息学奥赛初赛天天练-83-NOIP2014普及组-基础题2-输入设备、输出设备、操作系统、二进制、整数除法、while、do while循环

1 NOIP 2014 普及组 基础题2 4 以下哪一种设备属于输出设备( ) A 扫描仪 B 键盘 C 鼠标 D 打印机 5 下列对操作系统功能的描述最为完整的是( ) A 负责外设与主机之间的信息交换 B 负责诊断机器的故障 C 控制和管理计算机系统的各种硬件和软件资源的使用 D 将没有程序编译成目标程序 11 下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( ) A 296

免费SSL证书大全,加速普及网站实现HTTPS加密

免费SSL证书大全,加速普及网站实现HTTPS加密   SSL 证书用于加密 HTTP 协议,实现网站通过HTTPS加密协议访问。随着国内外各大网站实现全站 HTTPS 协议,以及搜索引擎对使用 HTTPS 协议网站的更加友好,加之互联网对数据和隐私安全的加强,网站添加 SSL 证书并实现 HTTPS 加密协议访问已经成为趋势和必然。 SSL证书大全​zzzjtd.com 而对于给网站添加

讨论运维监控工具的普及程度

在讨论运维监控工具的普及程度时,加入PIGOSS BSM产品的分析是非常有意义的,因为PIGOSS BSM是一款在中国市场具有一定影响力的运维监控工具。 PIGOSS BSM运维监控工具是一款综合性的IT运维监控解决方案,它能够对多层次的IT资源进行监测,包括但不限于性能监测、事件管理、报表管理等功能模块。PIGOSS BSM的一个独特之处在于其拓扑关联配置工具,这使得用户可以根据自身的I

P2239 [NOIP2014 普及组] 螺旋矩阵

P2239 [NOIP2014 普及组] 螺旋矩阵 50分 //O(n^2)复杂度,能算n<=10000的 #include <bits/stdc++.h>using namespace std;//row当前行, column当前列, left:左边界,righ:右边界,top:上边界,bottom:下边界 int n, x, y, ans, row=1, column=0, lef,

2020计算机挑战赛Java组真题

单选题 1.下列叙述哪些是错误的(). A.final 类不可以有子类 B.构造方法是类的一种特殊方法,其方法名必须与类名相同 C.抽象类可以用new运算符创建对象 D.内存回收程序不允许程序员直接释放内存2.下列叙述哪些是错误的(). A.abstract类不可以用new和构造函数定义对象 B.构造方法的返回值类型只能是void型 C.内存回收程序负责释放无用内存 D.Java类只能是单继承的

信息学奥赛初赛天天练-80-NOIP2015普及组-基础题5-错位排列、二叉树、完全二叉树、叶子节点、完全二叉树叶子节点

NOIP 2015 普及组 基础题5 21 重新排列 1234使得每一个数字都不在原来的位置上,一共有( )种排法 22 一棵结点数为 2015的二叉树最多有( )个叶子结点 2 相关知识点 1) 错位排列 考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n) 错排问题最早被尼古拉·伯努利和欧拉研究

蓝桥等级考1级c++组真题(选择)第一套(含答案解析)

纯个人整理,如有错误欢迎指正 1.以下关于C++程序描述错误的一项是() A.完整的程序必须有且仅有一个主函数,主函数的名字为main B.程序可以调用库函数,但必须要包含相对应的头文件 C.程序可以有注释行,注释行会被编译,但是不会被执行 D.程序的语句以分号结束,分号是c++程序不可缺少的组成部分 答案:C  解析: A. 程序有且只能有一个主函数,且名字必须为main B.

信息学奥赛初赛天天练-79-NOIP2015普及组-基础题4-即时通讯软件、二叉树遍历、前序遍历、中序遍历、后序遍历、算法时间复杂度

NOIP 2015 普及组 基础题4 11 下面哪种软件不属于即时通信软件( ) A QQ B MSN C 微信 D P2P 16 前序遍历序列与中序遍历序列相同的二叉树为( ) A 根结点无左子树 B 根结点无右子树 C 只有根结点的二叉树或非叶子结点只有左子树的二叉树 D 只有根结点的二叉树或非叶子结点只有右子树的二叉树 18 下列选项中不属于视频文件格式的是( ) A TXT B AV