CodeForces - 1250Bザ・饗宴とバス(+貪欲暴力)

問題の意味

https://vjudge.net/problem/CodeForces-1250B

誰もが有人容量*数は、最小コストを尋ねるAI、車のコストで2つのチーム(フル)まで運ぶ車のチームに属しています。

思考

K(チームの数)だけ8,000、この条件からこの話題を開始します。最初の大小規模の数に応じて各チームは、次に[k]は、車両の最小容量であり、我々は、L = 1の端部から、R = Kで、I [k]の開始からの車両の容量を列挙することができるように配列Aを、次に、もし[L] + [R] <= I、L ++、r--の、そうでない場合r--のことは、最初のチームの人々の多くを行います。しかし、もし車容量が非常に病気TLEため、データ次いで、[K] + [K-1]が設けられています。だから、容量の列挙を最適化するために、私たちの貪欲な割り付けチームの車は、通常の最小者の最大数を作り、上のすなわち、[1] + [K]、[2] + [K-1] 、......限り最大値は、これらの車両の容量の上限です。

コード

#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
#define INF 0x3f3f3f3f 
の#define LL長い長
のconst int型N = 5E5 + 5。
const int型MOD = 1E9 + 7。
constのダブルEPS = 1E-8; 
constのダブルPI = ACOS(-1.0); 
#define lowbit(X)(X&( - X))
LL [N]。
int型のmain()
{ 
    のstd ::イオス:: sync_with_stdio(偽); 
    LL N、K。
    CIN >> N >> K。
    以下のために(INT I 1 =; I <= N; I ++)
    { 
        int型のX; 
        cinを>> X; 
        [X] ++; 
    } 
    もし(K == 1)
    { 
        COUT << [1] << ENDL。
        0を返します。
    } 
    LL MX = 0。
    (INTのためにI 1 =; I <= K。
    {
        MX = MAX(MX、[I] + [K-I + 1])。
    } 
    ソート(+ 1、+ 1 + K)。
    LL RES = 1E16; 
    以下のための(iは[k]を= LL; I <= MX; I ++)
    { 
        LL L = 1、R = K、CNT = 0。
        (L <R)、一方
        { 
            CNT ++。
            ([L] + [R] <= 1)であれば
                、L ++、r--の。
            他の
                r--の; 
        } 
        (L == R)の場合
            、CNT ++。
        RES =分(RES、iはCNT *)。
    } 
    COUT << RES << ENDL。
    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/mcq1999/p/11837735.html