1. 程式人生 > >【AtCoder073E】Ball Coloring

【AtCoder073E】Ball Coloring

題目大意

  有n組數(xi,yi),每組中一個分到R,一個B兩個集合中,要求min{(RmaxRmin)(BmaxBmin)}
  其中1N200,0001xi,yi109

Solution

  Sad……自己沒想出來去看題解和別人程式還沒看懂……
  剛剛好像突然明白怎麼做了:
  考慮所有數中最大的和最小的:MINMAX,它們要麼在兩個集合中,要麼只在一個集合中。不失一般性,我們考慮以下兩種情況:
  
  1.Rmin=MINBmax=MAX
  這時,我們要最小化Rmax,最大化Bmin,那麼就只要在分組時把小的分給R,大的分給B即可。
  
  2.R

min=MINRmax=MAX
  這時,只需最小化BmaxBmin。【卡在這裡想了好久……QwQ】這樣的話我們知道肯定是要取,比如說2n個數一起排完序後,中間連續互斥的n個。這樣的話,我們先讓每組中的xi<yi,然後按照x陣列排序,先讓B陣列取x1xn,然後再逐個把xi調成yi計算答案即可。這時可以證明一定能取到最小:
  我們取到的是下圖所示的一些情況(這裡假設x1y1前還有一些數):
  
  記此時BmaxBmin=Best=max{y1,y2,x5}min{y1,y2,x3}
  考慮最優解不在上面的情況中,比如在某一位不同:
  
  所有情況都可以和圖示情況類似證明:
  左圖中有
  B
max
Bmin=max{y1,y2,y4,x5}min{y1,y2,x3}
max{y1,y2,x5}min{y1,y2,x3}=Best

  不是最優解或可以轉化為已判斷的情況。
  右圖中有
  BmaxBmin=max{y2,x5}x1x5x1=Best2
  不是最優解或可以轉化為已判斷的情況。(Best2如下圖所示)
  
  唔……現在好像沒什麼問題了!