你有乙個長度為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 對雙向的直接認識關係,...