UOJ 177 新年的腮雷

2021-09-05 03:56:16 字數 1079 閱讀 5099

你有乙個長度為n的序列a,和乙個長度為m的序列b

你每次可以選擇m個a中的數x1~xm合併(順序任意),合併會剩下乙個數,為min(xi+bi)

你需要讓剩下的最後的數最小。

n<=50000

正著做似乎怎麼都有問題,考慮倒過來

二分答案,我們每次考慮把乙個數x拆分成m個數x-b[i],這樣一定限制最松

我們的目標是拆到最後保證存在一種一一對應的方法使得每個a[i]都能找到乙個比它大的數與其匹配

這個可以考慮貪心,每次選最大的乙個x拆,考慮還沒有對應的最大的a是y,最小的b是b0

如果x-b0>=y那麼直接拆不會有問題

否則拆完之後x就不能對應y了,我們需要找到最小的乙個能對應y的對應上

感性理解一下這個的正確性。。。。

#include

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fd(i,a,b) for(int i=a;i>=b;i--)

using

namespace std;

intread()

const

int n=

5e4+5;

int n,m,a[n]

,b[n]

;multiset<

int> t;

typedef multiset<

int>

:: iterator it;

bool

check

(int mid)

else

}for

(it i=t.

begin()

;id;id--

,i++)if

(a[id]

>

-*i)

return0;

return1;

}int

main()

printf

("%d\n"

,l);

return0;

}

uoj 177 新年的腮雷

早上寫了一篇,就還想再寫一篇 挺不錯的乙個題 先來講講部分分吧 第一檔13分的很簡單,直接爆搜就可以了 第二檔11分的也很簡單,直接排個序就可以了 然後有一檔6分的,m 2 b m 2,b m 2,b 這的話,稍作思考,可以發現,每一次一定是選兩個最小的數合起來 然後剩下的檔我就不會了。算了一下只可...

uoj 176 新年的繁榮

給出乙個完全圖,邊權為兩點權值的and,求最大生成樹。這題用最小生成樹的boruvka演算法。大概就是每次找到每乙個聯通塊權值最大的邊,將這些聯通塊合併,直到只剩乙個聯通塊。因為每次聯通塊的個數至少減半,所以只會做log次操作。那麼這題相當於每個點有不同顏色,要找到每個點的異色點中最大的and值。扔...

uoj 175 新年的網警

在這新年的第一天,猴族首領猴腮雷打算來整治一下網路風氣。這時,他聽說在乙個叫做 universal oj 使用者群 的 qq 群中有人在散播 開 謠言 車 於是他就派了一群網警把這個使用者群裡的人都抓了回來,試圖找到謠言的源頭。這個使用者群中有 nn 個人,這些人中存在 mm 對雙向的直接認識關係,...