日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NOIP2009普及组细胞分裂(数论)——yhx

發(fā)布時間:2024/1/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NOIP2009普及组细胞分裂(数论)——yhx 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述

Hanks 博士是 BT (Bio-Tech,生物技術) 領域的知名專家。現(xiàn)在,他正在為一個細胞實

驗做準備工作:培養(yǎng)細胞樣本。

Hanks 博士手里現(xiàn)在有 N 種細胞,編號從 1~N,一個第 i 種細胞經(jīng)過 1 秒鐘可以分裂為

Si個同種細胞(Si為正整數(shù))。現(xiàn)在他需要選取某種細胞的一個放進培養(yǎng)皿,讓其自由分裂,

進行培養(yǎng)。一段時間以后,再把培養(yǎng)皿中的所有細胞平均分入 M 個試管,形成 M 份樣本,

用于實驗。Hanks 博士的試管數(shù) M 很大,普通的計算機的基本數(shù)據(jù)類型無法存儲這樣大的

M 值,但萬幸的是,M 總可以表示為 m1的 m2次方,即

M = m1^m2

,其中 m1,m2均為基本

數(shù)據(jù)類型可以存儲的正整數(shù)。

注意,整個實驗過程中不允許分割單個細胞,比如某個時刻若培養(yǎng)皿中有 4 個細胞,

Hanks 博士可以把它們分入 2 個試管,每試管內 2 個,然后開始實驗。但如果培養(yǎng)皿中有 5

個細胞,博士就無法將它們均分入 2 個試管。此時,博士就只能等待一段時間,讓細胞們繼

續(xù)分裂,使得其個數(shù)可以均分,或是干脆改換另一種細胞培養(yǎng)。

為了能讓實驗盡早開始,Hanks 博士在選定一種細胞開始培養(yǎng)后,總是在得到的細胞“剛

好可以平均分入 M 個試管”時停止細胞培養(yǎng)并開始實驗。現(xiàn)在博士希望知道,選擇哪種細

胞培養(yǎng),可以使得實驗的開始時間最早。

輸入輸出格式

輸入格式:

第一行有一個正整數(shù) N,代表細胞種數(shù)。

第二行有兩個正整數(shù) m1,m2,以一個空格隔開,

即表示試管的總數(shù) M = m1^m2。

第三行有 N 個正整數(shù),第 i 個數(shù) Si表示第 i 種細胞經(jīng)過 1 秒鐘可以分裂成同種細胞的個

數(shù)。

輸出格式:

輸出文件 cell.out 共一行,為一個整數(shù),表示從開始培養(yǎng)細胞到實驗能夠開始所經(jīng)過的

最少時間(單位為秒)。

如果無論 Hanks 博士選擇哪種細胞都不能滿足要求,則輸出整數(shù)-1。

1 #include<cstdio> 2 #include<cmath> 3 struct prm 4 { 5 int x,t; 6 }m[10010]; 7 int a[10010]; 8 int main() 9 { 10 int i,j,k,n,p,q,m1,m2,x,y,z,cntm,ans,t; 11 bool ok; 12 scanf("%d",&n); 13 scanf("%d%d",&m1,&m2); 14 cntm=0; 15 for (i=2;m1!=1;i++) 16 if (m1%i==0) 17 { 18 cntm++; 19 m[cntm].x=i; 20 while (m1%i==0) 21 { 22 m[cntm].t++; 23 m1/=i; 24 } 25 m[cntm].t*=m2; 26 } 27 ans=-1; 28 for (i=1;i<=n;i++) 29 scanf("%d",&a[i]); 30 for (i=1;i<=n;i++) 31 { 32 p=0; 33 ok=1; 34 for (j=1;j<=cntm;j++) 35 if (a[i]%m[j].x==0) 36 { 37 t=0; 38 while (a[i]%m[j].x==0) 39 { 40 a[i]/=m[j].x; 41 t++; 42 } 43 if (m[j].t%t==0) t=m[j].t/t; 44 else t=m[j].t/t+1; 45 if (t>p) p=t; 46 } 47 else 48 { 49 ok=0; 50 break; 51 } 52 if (ok&&(ans==-1||p<ans)) ans=p; 53 } 54 printf("%d\n",ans); 55 }

題目可以轉化成求方程ax=km1m2(k為整數(shù))的最小整數(shù)解。【我也來試一試打公式】

先把m1質因數(shù)分解,再把每個次數(shù)都乘上m2就是題中的M質因數(shù)分解的結果。

方程如果有解,那么必須m1的每個因數(shù)都是a的因數(shù),這樣a經(jīng)過冪之后才可能成為m1的倍數(shù)。在此基礎上,取各個因數(shù)中次數(shù)相差最多(指的是倍數(shù))的一個的倍數(shù),就是x的最小值。

轉載于:https://www.cnblogs.com/SBSOI/p/5574996.html

總結

以上是生活随笔為你收集整理的NOIP2009普及组细胞分裂(数论)——yhx的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。