国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【BZOJ 2257】【JSOI 2009】瓶子和燃料 【裴蜀定理】

2019-11-08 02:23:35
字體:
來源:轉載
供稿:網友

Description

jyy就一直想著盡快回地球,可惜他飛船的燃料不夠了。 有一天他又去向火星人要燃料,這次火星人答應了,要jyy用飛船上的瓶子來換。jyy 的飛船上共有 N個瓶子(1<=N<=1000) ,經過協商,火星人只要其中的K 個 。 jyy 將 K個瓶子交給火星人之后,火星人用它們裝一些燃料給 jyy。所有的瓶子都沒有刻度,只在瓶口標注了容量,第i個瓶子的容量為Vi(Vi 為整數,并且滿足1<=Vi<=1000000000 ) 。 火星人比較吝嗇,他們并不會把所有的瓶子都裝滿燃料。他們拿到瓶子后,會跑到燃料庫里鼓搗一通,弄出一小點燃料來交差。jyy當然知道他們會來這一手,于是事先了解了火星人鼓搗的具體內容?;鹦侨嗽谌剂蠋炖镏粫鋈缦碌?種操作: 1、將某個瓶子裝滿燃料; 2、將某個瓶子中的燃料全部倒回燃料庫; 3、將燃料從瓶子a倒向瓶子b,直到瓶子b滿或者瓶子a空。燃料傾倒過程中的損耗可以忽略?;鹦侨四贸龅娜剂?,當然是這些操作能得到的最小正體積。 jyy知道,對于不同的瓶子組合,火星人可能會被迫給出不同體積的燃料。jyy希望找到最優的瓶子組合,使得火星人給出盡量多的燃料。

Input

第1行:2個整數N,K, 第2..N 行:每行1個整數,第i+1 行的整數為Vi

Output

僅1行,一個整數,表示火星人給出燃料的最大值。

Sample Input

3 2 3 4 4

Sample Output

4

HINT

選擇第2 個瓶子和第 個瓶子,火星人被迫會給出4 體積的容量。

題解

這題就是不斷地倒水,最后能得到的最小值一定是這k個數的最大公約數。(由裴蜀定理可知)

設a1,a2,a3……an為n個整數,d是它們的最大公約數,那么存在整數x1……xn使得x1*a1+x2*a2+…xn*an=d。 特別來說,如果a1…an互質(不是兩兩互質),那么存在整數x1……xn使得x1*a1+x2*a2+…xn*an=1。證法類似兩個數的情況。

所以找出n個數所有因數,從大到小第一個出現k次的即是答案。

代碼

#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int y[1000000];int len,n,x,temp,k;void work(int x){ for(int i = 1;i <= sqrt(x);i++) if(x % i == 0) { y[++len] = i; if(i != x / i) y[++len] = x/i; } return;}int main(){ scanf("%d%d",&n,&k); len = 0; for(int i = 1;i <= n;i++) { scanf("%d",&x); work(x); } sort(y + 1,y + len + 1); temp = 1; for(int i = len-1;i >= 1;i--) { if(y[i] == y[i+1])temp++; else { if(temp >= k) {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富锦市| 泸水县| 贵阳市| 马关县| 榆中县| 阳江市| 达州市| 永靖县| 天柱县| 惠东县| 聊城市| 固镇县| 镇江市| 庄浪县| 民权县| 怀仁县| 开封市| 大港区| 麻栗坡县| 灵石县| 肥西县| 金溪县| 中山市| 六枝特区| 左权县| 金湖县| 宁乡县| 横山县| 朔州市| 泗水县| 美姑县| 越西县| 宁陵县| 永兴县| 黄冈市| 分宜县| 铜陵市| 双桥区| 静宁县| 华阴市| 鲁甸县|