SDNU 1354.Cutケーブル(GCD)

説明

    企業が持っているN(N <= 100)長いケーブルは、(長さが必ずしも同じではない)、我々はすべての長いケーブルの長さは整数であり、万メートルを超えていないと仮定する。今、私たちは、同じ長さの短いケーブルにそれらを切ります。私たちはすべての長いケーブルを無駄にしないことが必要と短いケーブルの長さが長い方が良いされています。切断後の最長の短いケーブルの長さとどのように多くの短いケーブルを計算してください。

入力

    入力は、2つの行を含んでいます。
    最初の行は、nは、長いケーブルの数を表します。
    2行目は、スペースで区切られたnは正の整数は、長いケーブルの長さを表しています。

出力

    最初の行は、短いケーブルの最長の長さを表します。
    2行目は、短いケーブルの数を表します。

サンプル入力

4 
18 12 24 30

サンプル出力

6つの
14 
アイデア:ケーブル長を削減することである。この問題は、入力のすべての長さを無駄にしていることができない整数の長さの結果であり、出力はまた、元の長さ(すべてのオリジナルの全てにGCD最大公約数を有する整数、すなわち、あります無駄がないので、長さは、その後数を見つけるために、)、分割することができます。(私は実際には半分で開始していないポイントを見つけた砂の彫刻をしたいと思います)
書式#include <cstdioを> 
する#include <iostreamの> 
の#include <cmath> 
の#include < 文字列 > 
の#include <CStringの> 
の#include <アルゴリズム> 
書式#include <キュー> 
の#include <ベクトル> 
の#include <マップ>
 使用して 名前空間はstd;
#defineっ長い長いのconst int型 INF = 0x3f3f3f3f const int型 MOD = 1E9 + 7 int型 nは、[ 10000 + 8 ]、NUM、LEN。int型の GCD(int型

  



X、int型のY)
{ 
    場合(Y!= 0戻り GCD(Y、Xの%のY)。
    リターンのx; 
} 

int型のmain()
{ 
    NUM = 0 
    scanf関数(" %のD "、&N)
    以下のためにint型私= 0 ; iがN <; Iは++ 
        のscanf(" %dの"、および[I])。
    LEN = [ 0 ]。
    以下のためにint型私= 1 ; iがN <; I ++
        LEN = GCD(LEN、[I])。
    以下のためにint型 i = 0 ; iがn <; iは++ 
        NUM + = [I] / LEN。
    printf(" %d個の\ n%d個の\ n " 、LEN、NUM)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/RootVount/p/11262751.html