武大学 - 財政援助
説明
牛大学:入学牛乳、NからCに在籍牛ヘッド(Nは奇数です)。彼らは授業料のaid_iを必要とする、score_iを獲得しています。私たちは、最高の中央値スコアながら新生児資金は、Fよりも多くを必要としません願っています。ここの数字を探しています。
入力
* 1行目:3スペースで区切られた整数N、C及びF
*まず2..C + 1行目:二列空間整数で区切っ。最初は、CSATスコアの子牛である、 第二の整数は、マーベリックスのために必要な資金援助の量であります
*まず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 ; }