題目
有一天杜教與睿爸在爭論誰才是\(oi\)界一哥,他們激烈辯論了半天也沒有個結果。
於是毛總想了乙個注意,他製作了乙個遊戲來幫助他們決定勝負。
遊戲規則是這樣的:
遊戲中一共有\(n\)個大小為\(2\)的棧。兩人輪流操作,睿爸先手。
每個人每次可以取出乙個棧頂的元素,獲得對應的收益。具體來說:第\(i\)個棧的棧頂的元素給睿爸的收益是\(a_i\) , 給杜教的收益是\(b_i\) ,棧底的元素給睿爸的收益是\(c_i\) ,給杜教的收益是\(d_i\) 。
同時,雙方由於在這件事上面拱起了大火,所以雙方博弈的目的都是要求自己的收益減去對面的收益最大。
由於雙方都是\(oi\)界扛把子,智慧型過人,所以他們都會採取對自己最優的決策。
睿爸最終想知道玩完遊戲後他的收益減去杜教的收益是多少。
solution
看起來像博弈的貪心。
我們設第\(i\)個元素給先手收益為\(x_i\)(取得的\(a_i\)或\(c_i\)),給後手收益為\(y_i\)(\(b_i\)或\(d_i\))
設先手最後取得元素集合為\(a\),全集為\(u\)
我們對答案進行觀察
\[\begin
ans &= maxx_i -\sum_y_i} \\
&= max (x_i + y_i) - \sum_ y_i}
\end
\]你會發現這個結論是如此顯然。
顯然全集中\(y_i\)的總和是乙個定值,那麼我們的目的就是讓\((x_i + y_i)\)最大。
\((x_i + y_i)\)是啥?是\(a_i + b_i\)或\(c_i + d_i\)
兩者目的相同,接下來考慮一些必然策略。
然後可以先排除所有\(a_i + b_i <= c_i + d_i\)的棧,因為所屬已經確定。
\(\mathrm\)
#include #include const int n = 20010;
int n;
template inline void read(t &s)
template inline void write(t x)
int bb[n], cnt = 0, a = 0, b = 0;
int ans1 = 0, ans2 = 0;
int a, b, c, d;
inline bool cmp(int x, int y)
main()
std ::sort(bb + 1, bb + cnt + 1, cmp);
for (int i = 1; i <= cnt; ++i) i & 1 ? ans1 += bb[i] : ans2 += bb[i];
write(ans1 - b);
return 0;
}
正睿2020普轉提 第六套 塔
題目 睿爸喜歡搭塔塔。睿爸有n 1n 1 n1 個高度h 1h 1 h1 的紅色磚塊,和n 2n 2 n2 個高度為h 2h 2 h2 的藍色磚塊,這些的磚塊的底面和頂面的長寬均相同,且你不能將這些磚塊立體旋轉或者轉動。睿爸可以按照如下方式搭塔 1.每個磚塊要麼可以放在地面上,要麼必須壘在乙個顏色不...
正睿2020普轉提 第六套 串
題目 睿爸喜歡玩串串。睿爸手裡有乙個只有小寫字母組成的串s ss 他希望你在裡面找出乙個字典序最小的子串行t tt 使得去掉子串行t tt的部分剩下的串是t tt的乙個排列。如果無法找到,請輸出 cl btxd y mathrm clbtx dy solution 貪心。對於每一位我們貪心選取合法 ...
正睿2020普轉提 第六套 串
題目 睿爸喜歡玩串串。睿爸手裡有乙個只有小寫字母組成的串 s 他希望你在裡面找出乙個字典序最小的子串行 t 使得去掉子串行 t 的部分剩下的串是 t 的乙個排列。如果無法找到,請輸出 mathrm solution 貪心。對於每一位我們貪心選取合法 字典序最小的 同時盡可能取位置靠前的 字母。乙個方...