[POJ - 2010]武大学 - 財政援助(PQ)

武大学 - 財政援助

説明

牛大学:入学牛乳、NからCに在籍牛ヘッド(Nは奇数です)。彼らは授業料のaid_iを必要とする、score_iを獲得しています。私たちは、最高の中央値スコアながら新生児資金は、Fよりも多くを必要としません願っています。ここの数字を探しています。

入力

* 1行目:3スペースで区切られた整数N、C及びF 

*まず2..C + 1行目:二列空間整数で区切っ。最初は、CSATスコアの子牛である、  第二の整数は、マーベリックスのために必要な資金援助の量であります 

出力

* 1行目:最大ベッシー中央値スコアに到達することができ、単一の整数。 ふくらはぎのN個の出力を受けるに十分なお金は-1がない場合。 

サンプル入力

3 5 70 
30 25 
50 21 
20 20 
5 18 
35 30

サンプル出力

35

ヒント

サンプル出力 ベッシーは5,35及びふくらはぎ50 CSAT画分を受け入れた場合、メジアン総資金援助が35 18 + 30 + 21 = 69 <= 70に必要。 
 
トピックリンク
 
最初の牛の授業lower_iの合計がスコア順にソートすると、中央値として、各牛、(前)低得点後にその合計upper_iよりも牛のを考えます。そして、第一の溶液Fスコアから低スキャン満たすために高いスコアaid_i + lower_i + upper_i <=は、最適なソリューションです。
 
ACコード
#include <iostreamの> 
する#include <cstdioを> 
する#include <fstreamの> 
する#include <アルゴリズム> 
の#include <cmath> 
の#include <両端キュー> 
の#include <ベクトル> 
の#include <キュー> 
の#include < ストリング > 1つ
の#include <CStringの> 
の#include <地図> 
の#include <スタック> 
の#include < 設定 > 
の#include <sstream提供>
 の#define IOS ios_base :: sync_with_stdio(0)。cin.tie(0)。
長い長いLL
 の#define 0x3f3f3f3f INF
 の#define MEM(X、Y)のmemset(X、Y、はsizeof(X))
 の#define MAXN 100005
 の#define P対<整数、整数>
 使用して 名前空間STD; 
P A [MAXN]; 
INT N、C、F;
 // ウシiが中央値として、低級[i]は、そのウシ授業の合計より少ないフラクション表す
INT 下限[MAXN]、アッパー[MAXN];
 int型のmain()
{ 
    CIN >> NをC >> F .;
     INTハーフ= N / 2 ;
     のためのint型 I = 0 ; I <C I ++ 
        CIN >> A [I] 1次回>> A [I] .second; //スコア授業 
    ソート(A、A + C); 
    { 
        // 決定下限[I] 
        int型の合計= 0 ; 
        PRIORITY_QUEUE < INT > Qと、
         のためのint型 I = 0 ;私はCを<; Iは++ 
        { 
            下限[I] = Q .size()==ハーフ?合計:INF; 
            q.push([I] .second); 
            合計 + = [I] .second;
             IF(q.size()> 半分)
            { 
                // 授業を除去最高 
                total- = q.top(); 
                q.pop()。
            } 
        } 
    } 
    { 
        // 決定アッパー[I] 
        INT合計= 0 ; 
        PRIORITY_QUEUE < INT > Q;
         のためint型のI = C- 1。 ; I> = 0 ; i-- 
        { 
            アッパー[I] = q.size ()==ハーフ?合計:INF; 
            q.push([I] .second); 
            合計 + = A [I] .second;
             IF(q.size()> 半分)
            { 
                // 最高授業を除去 
                = total- q.top()。
                q.pop(); 
            } 
        } 
    } 
    int型ANS。
    int型 I = C- 1 ; I> = 0 ; i-- 場合([i]は.second +低級[I] +アッパー[I] <= F)
        { 
            ANS = [I] 1次回。
            破ります; 
        } 
    COUT << ANS << ENDL。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/sky-stars/p/11345104.html