【NOIP】普及组2009 细胞分裂
【算法】数论
【题解】均分的本质是A整除B,A整除B等价于A的质因数是B的子集。
1.将m1分解质因数,即m1=p1^a1*p2^a2*...*pk^ak
所以M=m1^m2=p1^(a1*m2)*p2^(a2*m2)*...*pk^(ak*m2)
2.如果s[i](细胞初始个数)不能被M分解出来的质因数(即p1,p2...pn)中的某一个整除的话,这种细胞就永远不可能装入M个瓶子中
换句话说,如果s[i]分解出来的质因数不能包含M的所有质因数的话,就永远不能整除M(即使乘方(分裂)后)。
当然并不需要真的把s[i]分解为质因数,只要有一个s[i]%pj(j=1..k)!=0就说明是-1。
3.确定不是-1后,需要计算最小分裂时间。
当s[i]^ans中包含的每个pi的个数(假设为bi)比M中包含的pi的个数(即ai*m2)多时,就能被M整除。
所以就是找到最小的ans,使每个bi>=(ai*m2)(i=1...n)。
这个ans=ceil(a[i]*m2/b[i]) (只适用于a[i]*m2比b[i]大时)(ceil表示向上取整)
在所有s[i]中寻找最小的ans就是答案。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cctype>
using namespace std;
const int maxm=,maxn=,inf=0x3f3f3f3f,eps=1e-;
int pri[maxm],num[maxm],num2[maxm],s[maxn],tot=,n,m,m2,ans;
int main()
{
// freopen("cell.in","r",stdin);
// freopen("cell.out","w",stdout);
scanf("%d",&n); scanf("%d%d",&m,&m2);
for(int i=;i*i<=m;i++)
if(m%i==)
{
pri[++tot]=i;
while(m%i==)m/=i,num[tot]++;
}
if(m!=)pri[++tot]=m,num[tot]=;
for(int i=;i<=tot;i++)num[i]*=m2;
ans=inf;//for(int i=1;i<=tot;i++)printf("[%d]%d %d\n",i,pri[i],num[i]);
for(int i=;i<=n;i++)
{
scanf("%d",&s[i]);
int f=;
memset(num2,,sizeof(num2));
for(int j=;j<=tot;j++)
if(s[i]%pri[j]!=)f=;
if(f)continue;
for(int j=;j<=tot;j++)
while(s[i]%pri[j]==)
num2[j]++,s[i]/=pri[j];
int maxs=;
for(int j=;j<=tot;j++)
if(num[j]>num2[j])//printf("[%d]num=%d,num2=%d\n",j,num[j],num2[j]),
maxs=max(maxs,(int)(ceil(1.0*num[j]/num2[j])+eps));
// printf("%d\n",maxs);
ans=min(ans,maxs);
}
if(ans==inf)ans=-;
printf("%d",ans);
return ;
}
【NOIP】普及组2009 细胞分裂的更多相关文章
- 2016.9.10初中部上午NOIP普及组比赛总结
2016.9.10初中部上午NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1340 好不爽!翻车了!不过排名差不多在中间偏上一点, 还好不是 ...
- 2016.8.17上午纪中初中部NOIP普及组比赛
2016.8.17上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1335 本来觉得自己能考高分,但只得160分,并列第九.至少又挤 ...
- 2321. 【NOIP普及组T1】方程
2321. [NOIP普及组T1]方程 时间限制: 1000 ms 空间限制: 262144 KB 题目描述
- [NOIP普及组2011]装箱问题
目录 链接 博客链接 题目链接 题目内容 题目描述 格式 输入 输出 样例 输入 输出 前缀知识 题解 题目名称:装箱问题 来源:2011年NOIP普及组 链接 博客链接 CSDN 洛谷博客 题目链接 ...
- [NOIP普及组2001]最大公约数和最小公倍数问题
目录 链接 博客链接 题目链接 题目内容 题目描述 格式 输入 输出 数据 样例 输入 输出 说明 题目名称:最大公约数和最小公倍数问题 来源:2001年NOIP普及组 链接 博客链接 CSDN 洛谷 ...
- 2016.8.15上午纪中初中部NOIP普及组比赛
2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...
- 2016.9.15初中部上午NOIP普及组比赛总结
2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...
- 2016.9.3初中部上午NOIP普及组比赛总结
2016.9.3初中部上午NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1339 这次真爽,拿了个第四!(我还被班主任叫过去1小时呢!) 进 ...
- 2016.8.19上午初中部NOIP普及组比赛总结
2016.8.19上午初中部NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1338 这次总结发得有点晚啊!我在这里解释一下, 因为浏览器的问 ...
随机推荐
- js中call(),apply(),以及prototype的含义
最近段时间主要学习前端去了,然而所遇到的一些问题我觉得有必要去深究一下 prototype: 1 js中有三种表达方法 类方法,属性方法,原型方法 function People(name) { th ...
- DEBUG_NEW和THIS_FILE
C++ 的一个 比较晦涩难懂的特点是你可以重载 new 操作符,并且你甚至可以给它附加参数.通常,操作符 new 只接受拟分配对象的大小: void* operator new(size ...
- 201621123037 《Java程序设计》第7周学习总结
作业06-接口.内部类 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 答: 思维导图: 其他-笔记: 2. 书面作业 1. ArrayList代码分析 1.1 解释Arr ...
- Asp.net MVC 获取IPv4 地址
public static string GetIP4Address() { string IP4Address = String.Empty; foreach (IPAddress IPA in D ...
- HDU2993_MAX Average Problem
题目要求你在n个数的序列中,找出一段连续的长度不小于k的连续的序列,使得这个序列的平均数最大.输出这个平均数. 典型的优先队列.首先我们需要根据输入的序列,制造一个和序列. 然后从k开始往后面走,其实 ...
- hive 排序和聚集
1.order by 是对数据进行全排序,属于标准排序语句 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规 ...
- 【刷题】BZOJ 2096 [Poi2010]Pilots
Description Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是 ...
- Last Position of Target
For a given sorted array (ascending order) and a target number, find the first index of this number ...
- 洛谷 U14472 数据结构【比赛】 【差分数组 + 前缀和】
题目描述 蒟蒻Edt把这个问题交给了你 ---- 一个精通数据结构的大犇,由于是第一题,这个题没那么难.. edt 现在对于题目进行了如下的简化: 最开始的数组每个元素都是0 给出nnn,optopt ...
- mysql数据库----下载安装、操作
一.mysql概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL ...