1. 程式人生 > >【NOIP2017提高A組集訓10.28】三元組

【NOIP2017提高A組集訓10.28】三元組

Description

有X+Y+Z個三元組(x[i],y[i],z[i]),請你從每個三元組中挑數,並滿足以下條件:
1、每個三元組中可以且僅可以選擇一個數(即x[i],y[i],z[i]中的一個)
2、選擇x[i]的三元組個數恰好為X
3、選擇y[i]的三元組個數恰好為Y
4、選擇z[i]的三元組個數恰好為Z問選出的數的和最大是多少
問選出的數的和最大是多少

Solution

在X=0的時候有一個很顯然的做法就是把y-z排個序,然後前面Y個給Y,後面的給Z,這樣可以讓在Y貢獻大的到Y去,在Z貢獻大的到Z去。
然後我們來考慮一下X不為0的情況。
我們可以考慮把它轉化為第一種情況,我們對於每個y和z都減去x,那麼前面的x位就變成0了,那麼就變成選y,選z和不選(選x)的情況了,最後把x都加上就好了。
那麼這樣很顯然也是把y-z排個序,但是在前面有不選的情況,所以我們就肯定是選前面Y個y值最大的更優,其他的都留給x,Z的處理也同理,然後這個東西我們可以打個桶來維護。

Code

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fod(i,a,b) for(i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int maxn=5e5+7,mxx=5e5;
int i,j,k,l,t,n,m,X,Y,Z,mi,c[maxn*2
]; ll ans,he,f[maxn],g[maxn]; struct node{ int x,y,z; }a[maxn]; bool cmp(node x,node y){return x.y-x.z>y.y-y.z;} int main(){ freopen("triple.in","r",stdin); freopen("triple.out","w",stdout); scanf("%d%d%d",&X,&Y,&Z);n=X+Y+Z; fo(i,1,n)scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z),he+=a[i].x,a[i].y-=a[i].x,a[i].z-=a[i].x; sort(a+1
,a+1+n,cmp); mi=0x7fffffff;fo(i,1,Y)mi=min(mi,a[i].y),f[Y]+=a[i].y,c[a[i].y+mxx]++; fo(i,Y+1,n){ if(mi>=a[i].y)f[i]=f[i-1]; else{ c[a[i].y+mxx]++;f[i]=f[i-1]+a[i].y-mi; c[mi+mxx]--;while(!c[mi+mxx])mi++; } } memset(c,0,sizeof(c)); mi=0x7fffffff;fo(i,n-Z+1,n)mi=min(mi,a[i].z),g[n-Z+1]+=a[i].z,c[a[i].z+mxx]++; fod(i,n-Z,1){ if(mi>=a[i].z)g[i]=g[i+1]; else{ c[a[i].z+mxx]++;g[i]=g[i+1]+a[i].z-mi; c[mi+mxx]--;while(!c[mi+mxx])mi++; } } fo(i,Y,n-Z+1)ans=max(ans,f[i]+g[i+1]+he); printf("%lld\n",ans); }

相關推薦

NOIP2017提高A集訓10.28三元

Description 有X+Y+Z個三元組(x[i],y[i],z[i]),請你從每個三元組中挑數,並滿足以下條件: 1、每個三元組中可以且僅可以選擇一個數(即x[i],y[i],z[i]中的一個

JZOJ 5439. NOIP2017提高A集訓10.31Calculate

題目 資料範圍 題解 直接求每個 ⌊ T

JZOJ5436. NOIP2017提高A集訓10.30Group

題意: 資料範圍: Analysis: 首先這個肯定先排序,這樣好確定最大最小數的差。對於一個組裡的差即為最左最右端點。 考慮DP,為表全狀態設 f

JZOJ 5416NOIP2017提高A集訓10.22密碼

Description 現在身為校慶志願者的小C正在引導校友們到他們集合的教室。終於,忙了一段時間的他可以休息一會兒了。這時,旁邊一位老校友的話吸引到了他。“我後來當了一名探險家,有一次,我來到了一個地方,在正前方有一扇門,旁邊寫著一行文字:’現在給你前m個字

NOIP2017提高A集訓10.22公交運輸

Description 城市中有一條長度為n的道路,每隔1的長度有一個公交車站,編號從0到n,學校在0號車站的位置。其中每個公交車站(除了n號車站)有兩個屬性ci和vi,代表從這個公交車站出發的公交車的性質。ci代表這個從i出發的公交車,相鄰兩個停靠站之間的距

JZOJ 5400. NOIP2017提高A模擬10.7Repulsed

Description 小w 心裡的火焰就要被熄滅了。 簡便起見,假設小w 的內心是一棵n -1 條邊,n 個節點的樹。 現在你要在每個節點裡放一些個滅火器,每個節點可以放任意多個。 接下來每個

JZOJ ANOIP2017提高A模擬7.10隨機

題目 思路 水法 正解時不可能的,這輩子都不可能的 首先,我們發現選兩個端點作為si,sj才是最優的。 所以我們可以列舉區間長度(i #include<cstdio> #include<cmath> using

JZOJ 100035. NOIP2017提高A模擬7.10區間

Description Input Output Sample Input sample1: 4 2 10 5 1 1 10 sample2: 1000

JZOJ 5400NOIP2017提高A模擬10.7Repulsed

DH ---------以上初三THU/PKU大爺---- Alan_cty LYD XHM HZJ ZZ ---以下是大神%-- YMW Samjia2000 werkeytom_ftd Crazy_czy WorldWide_D Yxuan

JZOJ 5404. NOIP2017提高A模擬10.10Graph

Description 給定一張n個點m條邊的無向圖,每條邊連線兩個頂點,保證無重邊自環,不保證連通 你想在這張圖上進行若干次旅遊,每次旅遊可以任選一個點x作為起點,再走到一個與x 直接有邊相連的點y,再走到一個與y 直接有邊相連的點z 並結束本次旅遊 作

NOIP2017提高A模擬10.7Repulsed

Description: 小w 心裡的火焰就要被熄滅了。 簡便起見,假設小w 的內心是一棵n -1 條邊,n 個節點的樹。 現在你要在每個節點裡放一些個滅火器,每個節點可以放任意多個。 接下來每個節點都要被分配給一個至多k 條邊遠的滅火器,每個滅火器最多

JZOJ5372.NOIP2017提高A模擬9.17貓鏈表+貪心+堆優化

margin targe sga gin bt5 ie8 usm shu auc x壹鼐順51比http://shequ.docin.com/txqq_cb3d1e346f 惹M3桓7O2疽http://www.docin.com/app/user/userinfo?use

[JZOJ5456]NOIP2017提高A沖刺11.6奇怪的隊列

失望 output 第一個 粉絲 排隊 return algo nod struct Description nodgd的粉絲太多了,每天都會有很多人排隊要簽名。今天有??個人排隊,每個人的身高都是一個整數,且互不相同。很不巧,nodgd今天去忙別的事情去了,就只好讓

JZOJ_100029. NOIP2017提高A模擬7.8陪審團 (Standard IO)

qsort sta begin tput 關心 關鍵字 int 最有 制度 Description 陪審團制度歷來是司法研究中的一個熱議話題,由於陪審團的成員組成會對案件最終的結果產生巨大的影響,訴訟雙方往往圍繞陪審團由哪些人組成這一議題激烈爭奪。 小 W 提出了

JZOJ 100027. NOIP2017提高A模擬7.7表示式

JZOJ 100027. 【NOIP2017提高A組模擬7.7】表示式 題目 Description Input 一行兩個整數k,p。 Output 一行一個整數表示答案。 Sample Input 1 3 Sample Output 6 D

JZOJ 5455NOIP2017提高A衝刺11.6拆網線

目錄: 題目: 分析: 程式碼: 題目: 傳送門 分析: 設f[i][0]f[i][0]表示在xx的子樹中,xx沒有被選擇的情況下最多有多少對點是兩兩配對的 f[

jzoj100026. NOIP2017提高A模擬7.7圖(倍增)

100026. 【NOIP2017提高A組模擬7.7】圖 Description 有一個n個點n條邊的有向圖,每條邊為<i,f(i),w(i)>,意思是i指向f(i)的邊權為w(i)的邊,現

jzoj100027. NOIP2017提高A模擬7.7表示式

Description Input 一行兩個整數k,p。 Output 一行一個整數表示答案。 Sample Input 1 3 Sample Output 6 Data Constraint 對於2

jzojs 5384. NOIP2017提高A模擬9.23四維世界

Description 眾所周知,我們常感受的世界是三維的。 Polycarp突然對四維空間產生了興趣,他想對四維空間進行一些研究。但是在此之前,他必須先對三維世界瞭解透徹。 於是Polycarp決定從零維,也就是一個點,開始他的研究。我們把一個點放在三維空間中,Polycarp把這

jzojs 100044. NOIP2017提高A模擬7.13abcd

哈哈,看這題挺少題解的,就發一份吧 Description Input 輸入檔名為abcd.in。 輸入檔案共 N+1 行。 第 1 行包含1個正整數N。 第 i+1 行包含4個整數a[i],b[i],c[i],d[i]。 Output 輸出